Python 3.6-将不同类型的列表作为输入

时间:2018-10-16 09:34:00

标签: python list input

如果我有一个类似“ 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]

3 个答案:

答案 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]