Подтвердить что ты не робот

Повторяющиеся элементы в списке

У меня есть list в Python:

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

Я хочу дублировать каждый элемент сразу рядом с оригиналом.

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

Порядок элементов должен быть сохранен.

4b9b3361

Ответ 1

>>> 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']

Ответ 2

Это старый, но я не вижу простой вариант здесь (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) пространственно-временную сложность, коротко, без зависимостей и также идиоматично.

Ответ 3

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

Ответ 4

Попробуйте это

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

Демо

Он просто сделает вашу работу, но это не оптимизированный способ сделать это.

используйте ан. отправленный @Steven Rumbalski

Ответ 5

Здесь довольно простой способ:

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)), [])

Ответ 6

Панда дает метод для дублированных элементов:

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