2016-03-22 7 views
3

は、私はPythonでこれを行うことができ、複数のアイテムの「いない場合」:すべての与えられたリストが空の場合のPython:使用

if not (list1, list2, list3): 
    ... 

確認するには?

私はそれ以外はどうすればいいですか?

+0

空リストの空ではないタプルなのでテクニックが動作しませんが、空でないタプルは常に「真実」です。 – tdelaney

答えて

6

少なくとも1つの要素を持つタプルはブーリアンコンテキストで真実です。つまり、not (list1, list2, list3)は常に、偽です。

空のリストがfalsyなので、あなたが使用できるビルトインany機能

if not any([list1, list2, list3]): 
    # ... 
0

ソリューションの下に示すとおりである。

if not (list1 or list2 or list3): 
+0

実際、私はこの論理が間違っていると確信しています - "not"は "or"よりも近くにバインドします。 – Ajean

-1

あなたは、単に行うことができます:

if len(list1) == 0 and len(list2) == 0 and len(list3) == 0: 
    # ... 
0

複数の変数がすべてNoneまたはFalseのようなものであるかどうかを確認するには、次のようにします。

if not any(list1, list2, list3): 
    print("All lists are empty") 

しかし、これはすべての偽のような値を(NoneFalse""[]、等...)含むリストでは動作しません。

def allitems(lst): 
    for x in lst: 
     if isinstance(x, (list, tuple)): 
      for y in allitems(x): 
       yield y 
     else: 
      yield x 

list1 = [None, [False], [False, [False, [None, False], False, None], [False, None]], False] 
print(any(allitems(list1))) # => False 

これは再帰的リスト/タプルでも機能します。それは、それらのすべての値がFalseのようなものであることを保証します。

0

それを行うための最も流暢な方法は、all高階関数を使用することです:

 
    if all(len(l) == 0 for l in (l1, l2, l3)): 
     print "lists are empty" 

それはあなたが何を意味するか読めるように述べているように、このチェックは、論理的に、より正確です。