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
是一个可变对象,它不会被复制,而是它的引用会被复制到整个列表中。