将列表项复制到另一个列表的优雅方法

时间:2016-04-11 17:49:40

标签: python

我想从给定的嵌套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)

我的问题是:还有另一种优雅的方式吗?

6 个答案:

答案 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]]