我是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”是右耳机中声音的项目列表。任何帮助,将不胜感激。谢谢。
答案 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]