我希望多次复制一个列表,同时保留列表本身的顺序。例如我现在所拥有的一切,它既不起作用,也不会给我一个错误。
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)
在此之后我不确定在哪里修复它。
答案 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)