我想从给定的嵌套list
复制前两个列表。我做了以下事情:
list = [[10,20],[30,40,50],[0,0],[1,2,3]]
sList = []
x = 0
for i in list:
if x == 2:
break
sList.append(i)
x+=1
print ("%s" % sList)
我的问题是:还有另一种优雅的方式吗?
答案 0 :(得分:2)
只需使用切片从列表中获取前两项。此外,不要使用列表,因为它会影响内置的list
:
list_ = [[10,20],[30,40,50],[0,0],[1,2,3]]
print(list_[:2])
输出:
[[10, 20], [30, 40, 50]]
想到切片的简单方法如下:
list_[start:end:step]
此外,正如我所了解的那样,您希望将这些数据实际提取到单独的列表中。因此,您可能希望使用复制模块,并使用deecopy。
根据文档:
对于可变或包含可变项的集合,副本为 有时需要这样一个人可以改变一个副本而不改变 其他
因此,您的代码可能如下所示:
from copy import deepcopy
sub_list = deepcopy(list_[:2])
答案 1 :(得分:0)
您可以使用切片:
sList = list[:2]
答案 2 :(得分:0)
>> list = [[10,20],[30,40,50],[0,0],[1,2,3]]
>> sList = list[:2]
>> print (sList)
[[10, 20], [30, 40, 50]]
答案 3 :(得分:0)
嗯,对于你的例子,只是
sList = [oList[0], oList[1]]
或等效
sList = oList[:2]
在您的示例代码中,sList引用与原始代码相同的列表(绝对不应该被称为list
) - 如果您确实需要副本,请使用
sList = [list(e) for e in oList[:2]]
复制嵌套列表
答案 4 :(得分:0)
您可以采取列表切片
Slist = list[0:2]
答案 5 :(得分:0)
my_list = [[10, 20], [30, 40, 50], [0, 0], [1, 2, 3]]
sliced_list = [sub_list[:] for sub_list in my_list[:2]]
>>> sliced_list
[[10, 20], [30, 40, 50]]
请注意[:]
复制列表,因此my_list或sliced_list的前两个元素中的任何更改都不会反映在另一个元素中(与简单切片不同)。
my_list[:2]
从列表中选择前两个子列表。
切片是指实际的子列表,而不是副本,如本例所示。
使用[:]
sliced_list[0].append(30)
>>> sliced_list
[[10, 20, 30], [30, 40, 50]]
>>> my_list
[[10, 20], [30, 40, 50], [0, 0], [1, 2, 3]]
使用切片
sliced_list = [sub_list for sub_list in my_list[:2]]
sliced_list[0].append(30)
>>> my_list
[[10, 20, 30], [30, 40, 50], [0, 0], [1, 2, 3]]