python列表中的重复元素

tes*_*060 13 python list-comprehension list

我有一个listPython:

l = ['a', 'c', 'e', 'b']
Run Code Online (Sandbox Code Playgroud)

我想立即复制原件旁边的每个元素.

ll = ['a', 'a', 'c', 'c', 'e', 'e', 'b', 'b']
Run Code Online (Sandbox Code Playgroud)

应保留元素的顺序.

Ste*_*ski 16

>>> l = ['a', 'c', 'e', 'b']
>>> [x for pair in zip(l,l) for x in pair]
['a', 'a', 'c', 'c', 'e', 'e', 'b', 'b']
Run Code Online (Sandbox Code Playgroud)

要么

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


oli*_*der 10

这是旧的,但我看不到这里的直截了当的选择(IMO):

[ item for item in l for repetitions in range(2) ]
Run Code Online (Sandbox Code Playgroud)

所以对于具体情况:

>>> 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']
>>> 
Run Code Online (Sandbox Code Playgroud)

并概括:

[ item for item in l for _ in range(r) ] 
Run Code Online (Sandbox Code Playgroud)

其中r是你想要的重复数量.

所以这有一个O(nr)空间和时间复杂度,很短,没有依赖性,也是惯用的.

  • 也适用于Python 3,正是我想要的:) (2认同)

Sto*_*ica 5

import itertools

ll = list(itertools.chain.from_iterable((e, e) for e in l))
Run Code Online (Sandbox Code Playgroud)

工作中:

>>> 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']
Run Code Online (Sandbox Code Playgroud)

正如Lattyware指出的那样,如果您想要的不只是元素的两倍,那么:

from itertools import chain, repeat

ll = list(chain.from_iterable(repeat(e, 2) for e in l))
Run Code Online (Sandbox Code Playgroud)