python列表中的重复元素

时间:2013-02-14 15:42:17

标签: python list list-comprehension

我在Python中有一个list

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

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

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

应保留元素的顺序。

6 个答案:

答案 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)

试试这个

for i in l:
    ll.append(i)
    ll.append(i)

Demo

它只是做你的工作,但它不是一种优化的方法。

使用ans。发表者@Steven Rumbalski

答案 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