我需要將輸入(一系列整數)轉換爲一堆列表。將輸入(從標準輸入)轉換爲列表
樣品輸入:
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']
我需要將輸入(一系列整數)轉換爲一堆列表。將輸入(從標準輸入)轉換爲列表
樣品輸入:
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']
使用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 ...
這裏有一種方法:
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()
。
This Works!但是如果我想將這個列表分成三個單獨的列表,我是否只需預先命名3個列表並重覆上述? –
@NoobCoder我剛編輯我的答案 – juliomalegria