Pythonにlist
があります:
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']
これは古いですが、ここに簡単なオプションが表示されません(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)空間と時間の複雑さを持ち、短く、依存関係がなく、慣用的でもあります。
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)), [])
これを試して
for i in l:
ll.append(i)
ll.append(i)
それはあなたの仕事をするだけですが、これを行うための最適化された方法ではありません。
ansを使用します。 @StevenRumbalskiによる投稿
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