列表中的重复元素

22 投票
6 回答
45227 浏览
提问于 2025-04-17 15:53

我在Python里有一个list(列表):

l = ['a', 'c', 'e', 'b']

我想让每个元素旁边都复制一个和它一样的元素。

ll = ['a', 'a', 'c', 'c', 'e', 'e', 'b', 'b']

而且元素的顺序要保持不变。

6 个回答

7
import itertools

ll = list(itertools.chain.from_iterable((e, e) for e in l))

在工作中:

>>> import itertools
>>> l = ['a', 'c', 'e', 'b']
>>> ll = list(itertools.chain.from_iterable((e, e) for e in l))
>>> ll
['a', 'a', 'c', 'c', 'e', 'e', 'b', 'b']

正如Lattyware提到的,如果你想要的不仅仅是把元素加倍:

from itertools import chain, repeat

ll = list(chain.from_iterable(repeat(e, 2) for e in l))
17

这段内容有点老旧,但我觉得这里没有简单明了的选项:

[ item for item in l for repetitions in range(2) ]

针对这个具体的情况:

>>> l = ['a', 'c', 'e', 'b']
l = ['a', 'c', 'e', 'b']
>>> [ i for i in l for r in range(2) ]
[ i for i in l for r in range(2) ]
['a', 'a', 'c', 'c', 'e', 'e', 'b', 'b']
>>> 

再说得更一般一点:

[ item for item in l for _ in range(r) ] 

这里的 r 是你想要重复的次数。

所以这个方法的空间和时间复杂度是 O(n.r),它简短,没有依赖关系,而且也很符合常规写法。

25
>>> l = ['a', 'c', 'e', 'b']
>>> [x for pair in zip(l,l) for x in pair]
['a', 'a', 'c', 'c', 'e', 'e', 'b', 'b']

或者

>>> from itertools import repeat
>>> [x for item in l for x in repeat(item, 2)]
['a', 'a', 'c', 'c', 'e', 'e', 'b', 'b']

撰写回答