我正在尝试在python代码中使用raw_input来获取列表的用户输入,如下所示。
input_array.append(list(raw_input()));
用户输入为:
1 2 3 5 100
但是代码将输入解释为
[['1', ' ', '2', ' ', '3', ' ', '5', ' ', '1', '0', '0']]
尝试:如果我使用普通input()
代替raw_input()
,我将在控制台中遇到问题。
"SyntaxError: ('invalid syntax', ('<string>', 1, 3, '1 2 3 4 100'))"
注意:我不允许以列表格式提供输入,如
[1,2,3,5,100]
有人可以告诉我如何继续下去。
答案 0 :(得分:6)
>>> [int(x) for x in raw_input().split()]
1 2 3 5 100
[1, 2, 3, 5, 100]
>>> raw_input().split()
1 2 3 5 100
['1', '2', '3', '5', '100']
创建一个按空格分割的新列表,然后
[int(x) for x in raw_input().split()]
将此新列表中的每个字符串转换为整数。
list()
是一个从可迭代构建列表的函数,例如
>>> list({1, 2, 3}) # constructs list from a set {1, 2, 3}
[1, 2, 3]
>>> list('123') # constructs list from a string
['1', '2', '3']
>>> list((1, 2, 3))
[1, 2, 3] # constructs list from a tuple
所以
>>> list('1 2 3 5 100')
['1', ' ', '2', ' ', '3', ' ', '5', ' ', '1', '0', '0']
也有效,list
函数遍历字符串并将每个字符附加到新列表。但是,您需要用空格分隔,因此list
函数不合适。
input
接受一个字符串并将其转换为对象
'1 2 3 5 100'
不是有效的python对象,它是由空格分隔的5个数字。 为清楚起见,请考虑输入
>>> 1 2 3 5 100
SyntaxError: invalid syntax
进入Python Shell。它只是无效的语法。所以input
也会引发此错误。
重要的一面是:
input
不是一个安全的函数,即使您提到的字符串是'[1,2,3,5,100]'
,也不应该使用input
,因为有害的python代码可以通过input
执行。
如果出现这种情况,请使用ast.literal_eval
:
>>> import ast
>>> ast.literal_eval('[1,2,3,5,100]')
[1, 2, 3, 5, 100]