将数字输入空列表Python

时间:2014-05-07 19:53:11

标签: list python-3.x input append tuples

我正在编写一个演示线性搜索的程序,但我仍然坚持我正在采取的其中一个步骤。在这一步中,我试图让程序获取用逗号分隔的数字输入列表,然后以列表形式返回列表。
(例如1,5,2,4 - > [1,5,2,4])。 到目前为止,我的代码将以列表形式返回输入,但仅当我输入一个数字时。 (例如3 - > [3])。

def main():
    n = eval(input("Enter list of numbers separated by commas: "))
    list = []
    n = int(n)
    list.append(n)

    print(list)
main()

但是当我用逗号输入数字列表时,我收到了这个错误:

     Traceback (most recent call last):
File "C:/Users/eardery/Desktop/Final Exam Practice/linearsearch.py", line 8, in  <module>
  main()
File "C:/Users/eardery/Desktop/Final Exam Practice/linearsearch.py", line 4, in main
   n = int(n)
TypeError: int() argument must be a string or a number, not 'tuple'

在没有出现此错误的情况下评估输入的另一种方法是什么,让程序按照我的意图工作?并且有人可以解释什么是&#39;元组&#39;是

5 个答案:

答案 0 :(得分:3)

您不应在此使用eval。使用用户输入时最好避免使用eval。此外,它通常会返回意外的结果,就像你的情况一样,它处理的整数列表不同于单个整数。)

这样的事情怎么样:

line = input("Enter list of numbers separated by commas: ")
data = [int(i) for i in line.split(',')]

最后一行将文本分开,并将每个元素转换为int。它相当于

data = []
for i in line.split(','):
    data.append(int(i))

答案 1 :(得分:2)

元组是一个不可变的(不可更改的)列表。这就是Python假设你输入的内容,因为它是一个以逗号分隔的列表。

split(',')允许您将'1,2,3'分解为['1', '2', '3']并将'4'转换为['4']

你仍然需要将每个字符串转换为int,并且我正在为此进行列表理解。

def main():
    n = input("Enter list of numbers separated by commas: ")
    # For each val in list of input, make int.
    list = [int(val) for val in n.split(',')]
    print(list)

if __name__ == '__main__':
    main()

答案 2 :(得分:0)

您不需要评估功能。它仅用于评估这些东西。

您需要通过拆分功能拆分输出并将其转储到列表中。

您的解决方案: -

def main():
    n = raw_input("Enter list of numbers separated by commas: ")
    list= [int(value) for value in n.split(',')]
    print(list)
main()

答案 3 :(得分:0)

def main():
    n = list(input("Enter list of numbers separated by commas: "))
    n = map(lambda x:int(x),n)
    print( n)
main()

答案 4 :(得分:-1)

不要使用eval因为eval是邪恶的。

def main():
    raw = input("Enter list of numbers separated by commas: ")
    numbers = list(map(int, raw.split(',')))
    print(numbers)

if __name__ == '__main__':
    main()