単一項目をN回繰り返したリストを作成する 質問する

単一項目をN回繰り返したリストを作成する 質問する

長さが異なる一連のリストを作成したいと思います。各リストには、同じ要素がe繰り返し含まれますn(ここでn= リストの長さ)。

[e for number in range(n)]各リストにリスト内包表記を使用せずにリストを作成するにはどうすればよいですか?

ベストアンサー1

次のように書くこともできます:

[e] * n

たとえば、e が空のリストである場合、n 個の独立した空のリストではなく、同じリストへの n 個の参照を含むリストが取得されることに注意してください。

性能試験

一見すると、repeat は n 個の同一要素を持つリストを作成する最も速い方法のように思えます。

>>> timeit.timeit('itertools.repeat(0, 10)', 'import itertools', number = 1000000)
0.37095273281943264
>>> timeit.timeit('[0] * 10', 'import itertools', number = 1000000)
0.5577236771712819

しかし待ってください - それは公平なテストではありません...

>>> itertools.repeat(0, 10)
repeat(0, 10)  # Not a list!!!

この関数はitertools.repeat実際にはリストを作成しません。必要な場合にリストを作成するために使用できるオブジェクトを作成するだけです。もう一度試してみましょう。ただし、リストに変換します。

>>> timeit.timeit('list(itertools.repeat(0, 10))', 'import itertools', number = 1000000)
1.7508119747063233

したがって、リストが必要な場合は を使用します[e] * n。要素を遅延生成する場合は を使用しますrepeat

おすすめ記事