2013-10-05 47 views
3

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

样品输入:

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'] 

回答

8

使用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 ... 
+0

This Works!但是如果我想将这个列表分成三个单独的列表,我是否只需预先命名3个列表并重复上述? –

+1

@NoobCoder我刚编辑我的答案 – juliomalegria

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] 

假设数字是整数,该数字有小数的情况下与float()更换int()