我在Python中有一个列表
:
l = ['a', 'c', 'e', 'b']
我想立即复制每个原始元素旁边的元素。
ll = ['a', 'a', 'c', 'c', 'e', 'e', 'b', 'b']
元素的顺序应该被保留。
我在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']
itertools.chain.from_iterable()
,所以这没什么大不了的。 - Gareth Latty这篇文章有些过时,但我认为没有直接的解决方案(在我看来):
[ 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)的时间和空间复杂度,简短明了,没有依赖关系,也很符合惯用法。
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']
from itertools import chain, repeat
ll = list(chain.from_iterable(repeat(e, 2) for e in l))
itertools.repeat()
可能是一个更好的选择。 - Gareth Lattychain.from_iterable
。 - mgilsonchain
和其参数列表之间的空格。同时,按照mgilson的建议,使用了chain.from_iterable()
进行修复。我还根据需要在参数之间添加了空格,并更改了通常用于表示丢弃值的下划线_
。 - Gareth Lattyfrom_iterable
。 - StoryTeller - Unslander Monicasum(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