20

私はlistPythonで持っています:

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

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 に答える