長さが異なる一連のリストを作成したいと思います。各リストには、同じ要素が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
。