20

list在 Python 中有一个:

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

我想在原始元素旁边立即复制每个元素。

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

应保留元素的顺序。

4

6 回答 6

22
>>> 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']
于 2013-02-14T15:46:00.420 回答
15

这很旧,但我在这里看不到直接的选项(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) 的空间和时间复杂度,很短,没有依赖关系并且也是惯用的。

于 2016-06-29T12:38:52.150 回答
6
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))
于 2013-02-14T15:45:11.430 回答
3

试试这个

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

演示

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

使用答案。由@Steven Rumbalski 发布

于 2013-02-14T15:46:09.307 回答
2

这是一个非常简单的方法:

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)), [])
于 2015-10-01T22:07:41.580 回答
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
于 2019-05-06T13:54:04.593 回答