我需要将输入(一系列整数)转换为一堆列表。将输入(从标准输入)转换为列表
样品输入:
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