【问题标题】:Inputting Numbers Into Empty List Python将数字输入到空列表 Python
【发布时间】:2014-06-24 23:30:08
【问题描述】:

我正在编写一个演示线性搜索的程序,但我坚持我正在采取的步骤之一。在这一步中,我试图让程序获取以逗号分隔的数字输入列表,然后以列表形式返回该列表。
(例如 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'

还有什么方法可以在不出现此错误的情况下评估输入并让程序按照我的预期工作?有人能解释一下什么是“元组”吗?

【问题讨论】:

  • 看看 n 包含什么 ;-)
  • 不要使用list作为变量名。有一个具有该名称的内置东西。
  • eval 实际上为您完成了工作,nints 的元组。但实际上,您应该听取以下回答者的建议,不要在用户输入时使用eval

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


【解决方案1】:

你不需要 eval 函数。仅用于评估材料。

您需要通过 split 函数拆分输出并将其转储到列表中。

您的解决方案:-

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

【讨论】:

  • 这不会将字符串转换为整数。
  • 您可以通过 int() 进行类型转换 :)
  • 不要使用列表,它是一个内置类型。对list 的第一个分配是无用的。
  • 我故意留着让他明白。我知道不声明 vairable 是可以实现的
【解决方案2】:
def main():
    n = list(input("Enter list of numbers separated by commas: "))
    n = map(lambda x:int(x),n)
    print( n)
main()

【讨论】:

  • 你不能。您只会得到单个字符的列表。
  • 这只会返回一个字符串列表。必须转换为整数。
【解决方案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))

【讨论】:

  • 注意:他显然使用的是Python 3,所以应该是input而不是raw_input
  • 您说得对,先生。旧习难改。我已经适当地适应了。
  • 成功了!我知道我现在犯了什么错误。谢谢!
【解决方案4】:

不要使用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()

【讨论】:

  • 嘿,-2?为什么?请发表评论!
  • 很可能是因为list(map(int, raw.split(','))) 不像[int(val) for val in raw.split(',')] 那样Pythonic。此外,使用列表推导进行优化通常会使它们比listmap 更快。
  • 抱歉,这是个人喜好问题 ;-)
  • 我没有投反对票,但我认为这就是原因。我发现列表理解更容易快速阅读。
【解决方案5】:

元组是一个不可变(不可更改)的列表。这是 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    相关资源
    最近更新 更多