1. ホーム
  2. python

[解決済み] 1つの項目をN回繰り返したリストを作成する

2022-03-15 09:33:06

質問

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

リスト内包を使わずに、リストを作成するにはどうしたらいいのか [e for number in xrange(n)] を各リストに設定することはできますか?

解決方法は?

と書くこともできます。

[e] * n

e が例えば空のリストだった場合、同じリストへの n 個の参照を持つリストが得られ、独立した空のリストが n 個得られるわけではないことに注意してください。

パフォーマンステスト

一見すると と思われる は、n 個の同じ要素を持つリストを作成するには、repeat が最も速い方法です。

>>> 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 .