web-dev-qa-db-ja.com

リスト内の要素が重複しています

Pythonにlistがあります:

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

オリジナルのすぐ隣に各要素を複製したいと思います。

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

要素の順序は保持する必要があります。

13
tesla1060
>>> 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']
16

これは古いですが、ここに簡単なオプションが表示されません(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)空間と時間の複雑さを持ち、短く、依存関係がなく、慣用的でもあります。

11
olivecoder
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が指摘したように、要素を2倍以上にしたい場合は、次のようにします。

from itertools import chain, repeat

ll = list(chain.from_iterable(repeat(e, 2) for e in l))

これは非常に簡単な方法です。

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

これを試して

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

デモ

それはあなたの仕事をするだけですが、これを行うための最適化された方法ではありません。

ansを使用します。 @StevenRumbalskiによる投稿

2
Arpit

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
0