2013-10-05 44 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()