将输入(从标准输入)转换为列表

时间:2013-10-05 21:24:15

标签: python arrays list input

我需要将输入(整数系列)转换为一堆列表。

示例输入:

3
2
2 2 4 5 7

示例输出:

list1=[3]
list2=[2]
list3=[2,2,4,5,7]

我正在尝试这样做:

list=[]
import sys
for line in sys.stdin:
    list.append(line)

但是打印清单返回

['3\n', '2\n', '2 2 4 5 7']

2 个答案:

答案 0 :(得分:9)

使用split将字符串拆分为列表,例如:

>>> '2 2 4 5 7'.split()
['2', '2', '4', '5', '7']

如您所见,元素是字符串。如果要将元素作为整数,请使用int和列表推导:

>>> [int(elem) for elem in '2 2 4 5 7'.split()]
[2, 2, 4, 5, 7]

所以,在你的情况下,你会做类似的事情:

import sys

list_of_lists = []

for line in sys.stdin:
    new_list = [int(elem) for elem in line.split()]
    list_of_lists.append(new_list)

您最终会得到一份清单:

>>> list_of_lists
[[3], [2], [2, 2, 4, 5, 7]]

如果您想将这些列表作为变量,只需执行以下操作:

list1 = list_of_lists[0]  # first list of this list of lists
list1 = list_of_lists[1]  # second list of this list of lists
list1 = list_of_lists[2]  # an so on ...

答案 1 :(得分:1)

这是一种方式:

import ast
line = '1 2 3 4 5'
list(ast.literal_eval(','.join(line.split())))
=> [1, 2, 3, 4, 5]

这个想法是,对于您阅读的每一行,您可以使用literal_eval()将其转换为列表。另一个较短的选择是使用列表推导:

[int(x) for x in line.split()]
=> [1, 2, 3, 4, 5]

以上假设数字是整数,如果数字有小数,则将int()替换为float()