复制列表中的项目

时间:2013-10-15 23:26:30

标签: python list duplicates

我是python的新手,我想弄清楚如何在列表中复制项目。我已经尝试了几个不同的东西,并广泛搜索答案,但总是想出一个如何删除重复项目的答案,我觉得我错过了一些应该相当明显的东西。

我想要一个要复制的项目列表,例如列表是[1,4,7,10]是[1,1,4,4,7,7,10,10]

我知道

list = range(5)
for i in range(len(list)):
    list.insert(i+i, i)
print list

将返回[0,0,1,1,2,2,3,3,4,4],但如果项目不按顺序,则不起作用。 为了提供更多的上下文,我正在使用音频作为列表,试图使音频变慢。

我正在使用:

def slower():
     left = Audio.getLeft()
     right = Audio.getRight()
     for i in range(len(left)):
          left.insert(????)
          right.insert(????)

其中“left”返回左耳机中“声音”的项目列表,“right”是右耳机中声音的项目列表。任何帮助,将不胜感激。谢谢。

5 个答案:

答案 0 :(得分:6)

这是一个简单的方法:

def slower(audio):
    return [audio[i//2] for i in range(0,len(audio)*2)]

答案 1 :(得分:2)

这样的工作:

>>> list = [1, 32, -45, 12]
>>> for i in range(len(list)):
...     list.insert(2*i+1, list[2*i])
... 
>>> list
[1, 1, 32, 32, -45, -45, 12, 12]

一些注意事项:

  • 请勿将list用作变量名称。
  • 将自己压缩的列表展平可能更干净。

e.g。

>>> zip(list,list)
[(1, 1), (-1, -1), (32, 32), (42, 42)]
>>> [x for y in zip(list, list) for x in y]
[1, 1, -1, -1, 32, 32, 42, 42]

或者,您可以使用itertools懒散地完成这一切:

from itertools import izip, chain
for item in chain.from_iterable(izip(list, list)):
    print item

我其实最喜欢这种方法。当我查看代码时,我会立即知道它正在做什么(尽管其他人可能对此有不同的看法)。

我想,当我在这里时,我会指出我们可以用生成器函数做同样的事情:

def multiply_elements(iterable, ntimes=2):
    for item in iterable:
        for _ in xrange(ntimes):
            yield item

让我们面对现实 - 发电机很有趣。 : - )

答案 2 :(得分:0)

listOld = [1,4,7,10]
listNew = []

for element in listOld:
    listNew.extend([element,element])

答案 3 :(得分:0)

这可能不是最快的方式,但它非常紧凑

a = range(5)
list(reduce(operator.add, zip(a,a)))

a包含

[0, 0, 1, 1, 2, 2, 3, 3, 4, 4]

答案 4 :(得分:0)

a = [0,1,2,3]
list(reduce(lambda x,y: x + y, zip(a,a))) #=> [0,0,1,1,2,2,3,3]