次のようなリストがあるとします。
a = [[1, 2, 3], [4, 5, 6]]
filler = ['cat']
どうすれば入手できますか
b = [[1 ,2 ,3], ['cat'], [4, 5, 6], ['cat']]
アウトプットとして?
私はitertools
ここに投稿されたベースのソリューションが好きですが、リスト内包表記やを必要としないアプローチがあり、それはitertools
超高速だと思います。
new_list = [filler] * (len(a) * 2)
new_list[0::2] = a
私は次のようなものに itertools を使用することを好みます:
>>> import itertools as it
>>> a = [[1, 2, 3], [4, 5, 6]]
>>> filler = ['cat']
>>> list(it.chain.from_iterable(it.izip(a, it.repeat(filler))))
[[1, 2, 3], ['cat'], [4, 5, 6], ['cat']]
Pythonicではありませんが、うまくいくようです。
list = [[1, 2, 3], [4, 5, 6]]
result = []
for e in list:
result.append(e)
result.append(['cat'])
result.pop()
この投稿で見つかりました: リストに既にある各アイテムの間にアイテムを追加します
ここにアイデアがあります:
import itertools
a = [[1, 2, 3], [4, 5, 6]]
filler = ['cat']
print list(itertools.chain.from_iterable(zip(a, [filler] * len(a))))
出力:
[[1, 2, 3], ['cat'], [4, 5, 6], ['cat']]
itertools.islice()
と を使用したこのようなものitertools.cycle()
:
cycle()
を使用してアイテムを繰り返し、 を使用して繰り返しislice()
回数を に切り、len(a)
次にizip()
or を単純に使用し、 によって返されるイテレータを使用すると、タプルのリストが返されzip()
ます。a
islice()
を使用してこれを平坦化できますitertools.chain()
。
In [72]: a
Out[72]: [[1, 2, 3], [4, 5, 6]]
In [73]: b
Out[73]: ['cat']
In [74]: cyc=islice(cycle(b),len(a))
In [75]: lis=[]
In [76]: for x in a:
lis.append(x)
lis.append([next(cyc)])
....:
In [77]: lis
Out[77]: [[1, 2, 3], ['cat'], [4, 5, 6], ['cat']]
また:
In [108]: a
Out[108]: [[1, 2, 3], [4, 5, 6]]
In [109]: b
Out[109]: ['cat']
In [110]: cyc=islice(cycle(b),len(a))
In [111]: list(chain(*[(x,[y]) for x,y in izip(a,cyc)]))
Out[111]: [[1, 2, 3], ['cat'], [4, 5, 6], ['cat']]
a = [[1, 2, 3], [4, 5, 6]]
filler = ['cat']
out = []
for i in a:
out.append(i)
out.append(filler)
result = [si for i in zip(a, [filler]*len(a)) for si in i]
ワンライナーとしてこれを試してください:
from operator import add
a = [[1, 2, 3], [4, 5, 6]]
filler = ['cat']
reduce(add, ([x, filler] for x in a))
> [[1, 2, 3], ['cat'], [4, 5, 6], ['cat']]
または、使用せずにさらに簡単にreduce
:
sum(([x, filler] for x in a), [])
> [[1, 2, 3], ['cat'], [4, 5, 6], ['cat']]
どちらのソリューションも同じことを行います。まず、ジェネレーターを作成し[element, filler]
、結果のペアのストリームを平坦化します。効率化のため、最初のステップはジェネレーターを使用して実行され、不要な中間リストが回避されます。
アップデート:
この投稿は、オンライン フォーラムで荒らしに餌を与えてはならない理由の教科書的な例です。コメントを見て、私が何を意味するかを確認してください。トロールは無視したほうがいいです。
python 3.2
a = [[1, 2, 3], [4, 5, 6]]
b = ['cat']
_=[a.insert(x,b) for x in range(1,len(a)*2,2)]