Python:アイテムをリストにN回追加する


91

これは、Pythonにショートカットがあるようです。アイテムをリストにN回追加して、効果的にこれを実行したいと思います。

l = []
x = 0
for i in range(100):
    l.append(x)

そのための「最適化された」方法があるべきだと私には思えます。

l.append_multiple(x, 100)

ある?


9
l.extend([x] * 100)それが私の状況に最もよく合うので、結局はうまくいきました。琥珀は、最も包括的であるための答えのクレジットを取得します。ありがとう!
東寺

4
これを重要な目的で使用する前に、Pythonの参照セマンティクスを理解していることを確認してください。lに追加されたxはすべて同じxであるため、それらの1つを変更すると、それらすべてに影響します(100回参照されるすべてのx)。
Karl Knechtel 2011年

1
明確にするために:私は整数にそれを使用しているので、私の使用法は安全です。
東寺

回答:


132

不変のデータ型の場合:

l = [0] * 100
# [0, 0, 0, 0, 0, ...]

l = ['foo'] * 100
# ['foo', 'foo', 'foo', 'foo', ...]

参照によって保存され、後で変更したい場合がある値(サブリストやdictなど)の場合:

l = [{} for x in range(100)]

(最初の方法がintやstringsなどの定数値にのみ適している理由は、<list>*<number>構文を使用するときに浅いコピーしか実行されないためです。したがって、のような[{}]*100ことを行うと、100個の参照が発生することになります。同じ辞書に-したがって、それらの1つを変更すると、すべてが変更されます。intとstringは不変であるため、これは問題にはなりません。)

既存のリストに追加する場合はextend()、そのリストの方法を使用できます(上記の手法で追加するもののリストの生成と組み合わせて)。

a = [1,2,3]
b = [4,5,6]
a.extend(b)
# a is now [1,2,3,4,5,6]

1
または、両方の提案を組み合わせて、bの要素を繰り返したい時間はa.extend(b*n)どこn
ですか


6

私は割り当てのために別のルートに行かなければなりませんでしたが、これが私が最終的に得たものです。

my_array += ([x] * repeated_times)

5

リスト拡張と組み合わせたItertoolsリピート。

from itertools import repeat
l = []
l.extend(repeat(x, 100))


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.