我list
在 Python 中有一个:
l = ['a', 'c', 'e', 'b']
我想在原始元素旁边立即复制每个元素。
ll = ['a', 'a', 'c', 'c', 'e', 'e', 'b', 'b']
应保留元素的顺序。
我list
在 Python 中有一个:
l = ['a', 'c', 'e', 'b']
我想在原始元素旁边立即复制每个元素。
ll = ['a', 'a', 'c', 'c', 'e', 'e', 'b', 'b']
应保留元素的顺序。
>>> 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']
这很旧,但我在这里看不到直接的选项(IMO):
[ 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(nr) 的空间和时间复杂度,很短,没有依赖关系并且也是惯用的。
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))
这是一个非常简单的方法:
sum(zip(l, l), tuple())
它复制每个项目,并将它们添加到一个元组中。如果你不想要一个元组(我怀疑),你可以调用list
元组:
list(sum(zip(l, l), tuple()))
其他几个版本(产生列表):
list(sum(zip(l, l), ()))
sum([list(i) for i in zip(l, l)], [])
sum(map(list, zip(l, l)), [])
Pandas 给出了重复元素的方法:
import pandas as pd
l = pd.Series([2, 1, 3, 1])
print(l.duplicated())
>>>0 False
1 False
2 False
3 True
dtype: bool
print('Has list duplicated ? :', any(l.duplicated()))
>>>Has list duplicated ? : True