如果我有一个类似“ 1 2 3 4 5”的输入,我可以将其转换为int列表,如下所示:
a = input("List: ") #"1 2 3 4 5"
a = list(map(int, a.split())
print(a) #[1, 2, 3, 4, 5]
如果我们有一个输入,例如:“ 1 2 hello 4 5.0”,则可以将其转换为这样的列表:[1, 2, 'hello', 4, 5.0]
?
答案 0 :(得分:4)
我为此使用了ast.literal_eval
。根据文档literal_eval。
它可以安全地评估一个表达式节点或一个包含Python文字或容器显示的Unicode或Latin-1编码的字符串。
import ast
a="1 2 hello 4 5.0"
def converter(l):
try:
return ast.literal_eval(l)
except ValueError:
return l
print(list(map(converter,a.split())))
输入
1 2 hello 4 5.0
输出
[1, 2, 'hello', 4, 5.0]
输入
-123 123E123
输出
[-123, 1.23e+125]
答案 1 :(得分:3)
并非没有一些额外的工作:您需要自己的转换函数来处理各种类型。像(未经测试!)这样的东西:
def convert(s):
try:
return int(s)
except ValueError:
try:
return float(s)
except ValueError:
pass
return s
list(map(convert, a.split())
答案 2 :(得分:0)
如果您对list comprehensions的了解与我一样多,则可能需要使用类似的方法(首先应使用split()将字符串输入转换为列表):
a = [int(x) if str(x).isdigit() else float(x) if str(x).replace('.','',1).isdigit() else x for x in a]