したがって、次の 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をチェックしますTrueFalse
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を反復できないため、 . が得られます。FalseFalseTrueTrueFalseTypeError
これは適切な使用法ですか?もしそうなら、それは散らかったり、安全でなかったり、眉をひそめたりしていませんか?
まあ、それについて違法なことは何もありませんが、ご覧のとおり、それはあなたが望むことをしません. (ab)短絡評価を使用して、反復するイテラブルを選択すると役立つ場合がありますが、これはその 1 つではありません。