我在Python中有一个list
:
l = ['a', 'c', 'e', 'b']
我想立即复制原件旁边的每个元素。
ll = ['a', 'a', 'c', 'c', 'e', 'e', 'b', 'b']
应保留元素的顺序。
答案 0 :(得分: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']
或者
>>> from itertools import repeat
>>> [x for item in l for x in repeat(item, 2)]
['a', 'a', 'c', 'c', 'e', 'e', 'b', 'b']
答案 1 :(得分:10)
这是旧的,但我看不到这里直截了当的选择(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(n.r)空间和时间复杂度,很短,没有依赖性,也是惯用的。
答案 2 :(得分:4)
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))
答案 3 :(得分:2)
答案 4 :(得分:1)
这是一个非常简单的方法:
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)), [])
答案 5 :(得分:0)
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