如何在列表中复制列表的元素?

How to copy the elements of the list within the list?

我有一个列表 list_1 = [[1,2,3], [4,5,6], [7,8,9], ....]。我要[[1,2,3], [1,2,3], [4,5,6], [4,5,6], [7,8,9], [7,8,9]]。我怎样才能做到这一点? 基本上就像将列表的每个元素复制到它的连续索引。

from copy import deepcopy

def multiply_list_elem(lst, n):
    out = list()
    for elem in lst:
        for _ in range(n):
            out.append(deepcopy(elem))
    return out

if __name__ == '__main__':
    list_1 = [[1,2,3], [4,5,6], [7,8,9]]
    print(multiply_list_elem(list_1, 2))

最简单的解决方案如下:

使用参考

def double(some_list): 
    return_list = [] 
    for element in some_list: 
             return_list.append(element) 
             return_list.append(element) 
    return return_list
# example call
l = [1,[2, 42]]
print(double(l))
# output: [1,1,[2,42],[2,42]]

可以使用第二个 for 循环,但速度较慢。因此,我建议不要使用它,除非您想要 Félix Herbinet 的解决方案中提供的可变乘数。

使用(深度)复制

由于题中明确含有抄袭二字,我也展示抄袭版:

import copy

def double(some_list): 
    return_list = [] 
    for element in some_list: 
             return_list.append(copy.deepcopy(element)) 
             return_list.append(copy.deepcopy(element)) 
    return return_list
# example call
l = [1,[2, 42]]
print(double(l))
# output: [1,1,[2,42],[2,42]]

如果您不确定是需要复制还是深层复制,请阅读:https://docs.python.org/3/library/copy.html#shallow-vs-deep-copy

您可以将其用作迭代过程:

list_1 = [[1,2,3], [4,5,6], [7,8,9]]
list_2 = []
for element in list_1:
  for times in range(2):
    list_2.append(element)

或者这个列表理解:

首先声明另一个列表double,然后修改double,为lst的每个元素添加两个元素。
如果不想修改原始列表,可以删除 lst = double 语句。

示例代码:

def multiply(lst):
    double = [];
    for i in lst:
        for j in range(2):
            double.append(i);
    lst = double;
    return lst;

您可以将列表加倍,然后根据子列表的第一个索引进行排序:

from operator import itemgetter
from copy import deepcopy

list_1 = [[1,2,3], [4,5,6], [7,8,9]]

list_2 = sorted(list_1 + deepcopy(list_1), key = itemgetter(0))