复制列表中的每个成员 - python

ari*_*iel 31 python list

我想写一个复活列表的函数,[1,5,3,6,...][1,1,5,5,3,3,6,6,...] 想知道如何做到这一点?谢谢

Dav*_*rby 53

>>> a = range(10)
>>> [val for val in a for _ in (0, 1)]
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9]
Run Code Online (Sandbox Code Playgroud)

NB _传统上用作占位符变量名称,您不希望对变量的内容执行任何操作.在这种情况下,它仅用于为外循环每次生成两个值.

要将其从列表转换为生成器,请使用圆括号替换方括号.

  • 为了清楚起见,我将`range(2)`放在`(0,1)`上 (4认同)

Sil*_*ost 13

>>> a = [1, 2, 3]
>>> b = []
>>> for i in a:
    b.extend([i, i])


>>> b
[1, 1, 2, 2, 3, 3]
Run Code Online (Sandbox Code Playgroud)

要么

>>> [a[i//2] for i in range(len(a)*2)]
[1, 1, 2, 2, 3, 3]
Run Code Online (Sandbox Code Playgroud)


Han*_*Gay 9

如果您已经有roundrobin文档中描述的配方itertools- 并且它非常方便 - 那么您可以使用

roundrobin(my_list, my_list)
Run Code Online (Sandbox Code Playgroud)


Chr*_*heD 9

我会用zipitertools.chain.

>>> import itertools
>>> l = [1,5,3,6,16]
>>> list(itertools.chain(*zip(l,l)))
[1, 1, 5, 5, 3, 3, 6, 6, 16, 16]
Run Code Online (Sandbox Code Playgroud)

注意:我以前只使用list发生器使其适合打印.您可能不需要list代码中的调用...


mma*_*ine 6

可以使用列表乘法。如果您需要将每个列表成员放在一起,只需使用排序方法即可。

>>> lst = [1,2,3,4]
>>> sorted(lst*2)
[1,1,2,2,3,3,4,4]
Run Code Online (Sandbox Code Playgroud)

  • 如果你想保持原来列表的顺序怎么办?如果列表中的项目不可订购怎么办? (9认同)

PDi*_*lta 5

numpy.repeat 做你想要的:

import numpy as np
yourList = [1,5,3,6]
n = 2
list(np.repeat(yourList, n))
Run Code Online (Sandbox Code Playgroud)

结果:

[1, 1, 5, 5, 3, 3, 6, 6]
Run Code Online (Sandbox Code Playgroud)

如果您不介意使用numpy数组,也可以list()在最后一行省略该调用。


Ste*_*ann 5

用一点切片...

>>> a = [3, 1, 4, 1, 5]
>>> a[:0] = a[::2] = a[1::2] = a[:]
>>> a
[3, 3, 1, 1, 4, 4, 1, 1, 5, 5]
Run Code Online (Sandbox Code Playgroud)