したがって、次の 2 つのリストがあります。
>>> a = [1,2,3,4,5]
>>> b = [6,7,8,9,0]
...そして、 を反復したいa and b
。では、正確には 何ですか?a and b
>>> a and b
[6, 7, 8, 9, 0]
奇妙に見えるかもしれませんが、これは Python に関する次の 2 つの事実の結果です。
すべてのオブジェクトは、True
-ish またはFalse
-ish のいずれかです。例えば:
>>> bool(a)
True
>>> bool(b)
True
実際、空のリストを除くすべてのリスト[]
はTrue
-ish です。
Python は短絡評価を使用します。これは、 に対してa and b
、次のことを意味します。
-ish か-ishかどうかa
をチェックしますTrue
False
a
がFalse
-ish の場合、次のように評価されますa
a
がTrue
-ish の場合、次のように評価されますb
a and b
これらのルールに従えば、あなたのケースで が と評価される理由を確認できるはずです[6, 7, 8, 9, 0]
(実際の値の組み合わせに対して同じルールに従うと、True
短絡False
評価が意味を成すことがわかります)。
実際にやりたいことが の項目を反復処理してから の項目を反復処理する場合は、演算子を使用してa
それらを連結できます。b
+
>>> for item in a + b:
... print item,
...
1 2 3 4 5 6 7 8 9 0
フォローアップの質問について:
or
やなどの他の演算子を使用するとどうなるでしょうnot
か。
or
の短絡評価のルールは異なり (自分で調べるか、上記のリンクをたどることができます)、あなたの場合は(つまり) とa or b
評価されます。[1, 2, 3, 4, 5]
a
not
は常に-ish 値と -ish 値を返しTrue
ます。 orを反復できないため、 . が得られます。False
False
True
True
False
TypeError
これは適切な使用法ですか?もしそうなら、それは散らかったり、安全でなかったり、眉をひそめたりしていませんか?
まあ、それについて違法なことは何もありませんが、ご覧のとおり、それはあなたが望むことをしません. (ab)短絡評価を使用して、反復するイテラブルを選択すると役立つ場合がありますが、これはその 1 つではありません。