复制列表N次

时间:2015-10-09 20:52:22

标签: python python-2.7

我希望多次复制一个列表,同时保留列表本身的顺序。例如我现在所拥有的一切,它既不起作用,也不会给我一个错误。

def duplicate(testList, n):
    y = 0
    x = len(testList)
    newList=[]
    while y < x:
        for z in range (0, n):
            newList.append(testList[y])
        y = y + 1
    return newList

duplicate([1,2,3], 3)

在此之后我不确定在哪里修复它。

4 个答案:

答案 0 :(得分:3)

这个怎么样

>>> def duplicate(testList, n):
...     return testList*n
... 
>>> x=[1,2,3]
>>> duplicate(x,3)
[1, 2, 3, 1, 2, 3, 1, 2, 3]

testList * n将创建一个包含testList n次的新列表,这相当于(testList + testList + ....)n次

OR

>>> def duplicate(testList, n):
...     return [ele for ele in testList for _ in range(n)]
... 
>>> duplicate([1,2,3],2)
[1, 1, 2, 2, 3, 3]
>>> duplicate([1,2,3],3)
[1, 1, 1, 2, 2, 2, 3, 3, 3]

这将返回一个列表,其中每个元素在列表中重复n次,但请注意这个

>>> duplicate([[1,2,3]],3)
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]

答案 1 :(得分:2)

如果你想要[1, 2, 3, 1, 2, 3, 1, 2, 3]并且必须使用循环,请使用范围循环并扩展:

def duplicate(testList, n):
    new_list = [] 
    for i in range(n):
        new_list.extend(testList)
    return new_list

要获得与您自己的代码相同的输出,范围和扩展仍然有效:

def duplicate(testList, n):
    x = len(testList)
    new_list = []
    for j in range(x):
        new_list.extend(testList[j] for _ in range(n))
    return new_list


print(duplicate([1, 2, 3], 3))

可以简单地成为list comprehension

def duplicate(testList, n):
    return [ele for ele in testList for _ in range(n)]

如果您没有看到任何代码的输出,那么您最有可能从ide运行而不打印函数返回,即print(duplicate([1, 2, 3], 3))

最后,如果你要索引并使用两个循环并像你自己的代码一样使用append,那么你将使用2个范围循环,根本不需要while循环:

def duplicate(testList, n):
    x = len(testList)
    new_list = []
    for j in range(x):
        for _ in range(n):
            new_list.append(testList[j])
    return new_list

答案 2 :(得分:1)

假设列表中的可排序元素如何处理?

a = [1,2,3]
num_repeats = 3

a_expanded = a * num_repeats
a_expanded.sort()

答案 3 :(得分:0)

你应该切换for循环和while循环,并记住每次循环时初始化y。比较你的代码和我的变量y,你会发现你真的希望它变成0,1,2,0,1,2 ..所以它会绕过并附加正确的索引。

def duplicate(testList, n):
    x = len(testList)
    newList=[]
    for z in range (0, n):
        y = 0
        while y < x:
            newList.append(testList[y])
            y = y + 1
    return newList

print duplicate([1,2,3], 3)