web-dev-qa-db-ja.com

同じブール値でリストを初期化する

ループなしですべてのリスト値をブールに初期化することは可能ですか?たとえば、N個の要素のリストをすべてFalseにしたいです。

44
Alecs

次のようにできます:-

>>> [False] * 10
[False, False, False, False, False, False, False, False, False, False]

注:-同じ値のlist of mutable typesでこれを実行しないでください。そうしないと、以下の例のような驚くべき動作が見られます。

>>> my_list = [[10]] * 3
>>> my_list
[[10], [10], [10]]
>>> my_list[0][0] = 5
>>> my_list
[[5], [5], [5]]

ご覧のとおり、1つの内部リストで行った変更は、それらすべてに反映されます。

102
Rohit Jain
    my_list = [False for i in range(n)]

これにより、各要素を個別に構築するため、個々の要素を変更できます。

ただし、これは技術的にはisループです。

13
Noah

スペースが重要な場合、 bytearray の方が適しています。ブール解のリストの約5倍のスペース効率です。

これは、ゼロに初期化されたN値の配列を作成します。

B = bytearray(N)
5
Waylon Flinn