Python 重复列表中的元素x次
我想在保留顺序的同时,逐个复制每个元素。例如,函数看起来像Python 重复列表中的元素x次,python,python-2.7,Python,Python 2.7,我想在保留顺序的同时,逐个复制每个元素。例如,函数看起来像 def duplicate(testList, n) for i in l: ll.append(i) ll.append(i) testList是输入列表,n是复制其中每个元素的次数。根据我的想法,我不能循环一定次数。不知道怎么做。您可以简单地添加第二个循环,它将迭代n次添加您的值。不过,我建议你也要学习发电机,并像乔兰·比斯利建议的那样在一条线上完成 def duplicate(testLi
def duplicate(testList, n)
for i in l:
ll.append(i)
ll.append(i)
testList
是输入列表,n
是复制其中每个元素的次数。根据我的想法,我不能循环一定次数。不知道怎么做。您可以简单地添加第二个循环,它将迭代n次添加您的值。不过,我建议你也要学习发电机,并像乔兰·比斯利建议的那样在一条线上完成
def duplicate(testList, n)
for i in l:
for x in range(n):
ll.append(i)
怎么样
def n_times(v,n):
for i in range(n):
yield v
[i for j in testList for i in n_times(j,2)]
如果您希望得到这样的结果,您可以这样做:
from itertools import chain # Hinted by Ashwini Chaudhary
def repeat(lst, n):
return list(chain(*zip(*[x for _ in range(n)])))
>>> repeat([1, 2, 3], 3)
[1, 1, 1, 2, 2, 2, 3, 3, 3]
否则,如果您只想重复列表n
次,作为一般解决方案,您可以使用以下功能:
def repeat(lst, n):
result = []
for _ in range(n):
result += lst[:]
return result
>>> repeat([1, 2, 3], 2)
[1, 2, 3, 1, 2, 3]
但是,如果保证元素是不可变的对象,那么在Python中有一种非常好的方法可以让列表做到这一点:
>>> [1, 2, 3] * 2
[1, 2, 3, 1, 2, 3]
作为一个班轮:
def n_plicate(testList, n):
return reduce(lambda x,y: x+y, map(lambda x: [x]*n, testList))
或者更容易阅读,速度更快:
return [tm for sblst in [[x]*n for x in testList] for tm in sblst]
长而容易,无需任何进口
def duplicate(listt,number):
"""Input a list and a num evry vlue in the list is replctd by Num of times """
temp=[]
for i in listt:
temp.append(i*number)
output=[]
for j in temp:
output.extend(list(j))
return output
你能提供示例输入和预期输出吗?
ll.extend([i]*n)
也可以。这基本上是lst*n
,但我不认为OP在这里要求的是:重复([1,2,3],2)
-->[1,1,2,2,3,3]
。谢谢,我怀疑,我在等待OP的答复。为什么zip()
?如何:在lst:result+=[el]*n
中为el设置。最后是什么x
?使用zip
或izip
我们可以做类似的事情:list(chain.from_iterable(izip(*[1,2,3,4]]*3))
。考虑到我们处理的是不可变对象。哎呀,感谢这个bug:)关于[el]*n
的好观点,问题是如果el
是一个可变对象,它不会被复制,而是它的引用会被复制到整个列表中。