リストにブール演算子AND、OR、NOTとしてメンバーがないかどうかを確認しようとしています。
私が使う:
while ('AND' and 'OR' and 'NOT') not in list:
print 'No boolean operator'
ただし、私の入力が:a1 c2 OR c3 AND
、「ブール演算子なし」を出力します。これは、このループ文を使用することにより、このリストはブール演算子なしと見なされることを意味します。
誰かが修正を手伝ってくれることを願っています。
ありがとう、シンディ
データのボリュームがある場合、sets
を使用すると高速で叫びます
セットを使用する場合は、isdisjoint()
メソッドを使用して、演算子リストと他のリストの間の交差が空かどうかを確認します。
MyOper = set(['AND', 'OR', 'NOT'])
MyList = set(['c1', 'c2', 'NOT', 'c3'])
while not MyList.isdisjoint(MyOper):
print "No boolean Operator"
and
ing文字列は、あなたが思っていることを実行しません-anyを使用して、文字列がリストにあるかどうかを確認します。
while not any(Word in list_of_words for Word in ['AND', 'OR', 'NOT']):
print 'No boolean'
また、単純なチェックが必要な場合は、if
...よりもwhile
の方が適している可能性があります。
式'AND' and 'OR' and 'NOT'
は常に'NOT'
に評価されるため、効果的に
while 'NOT' not in some_list:
print 'No boolean operator'
それらすべてを個別にチェックすることもできます
while ('AND' not in some_list and
'OR' not in some_list and
'NOT' not in some_list):
# whatever
または使用セット
s = set(["AND", "OR", "NOT"])
while not s.intersection(some_list):
# whatever
式('AND' and 'OR' and 'NOT')
は'NOT'
に評価されるため、リストにNOTがあるかどうかをテストしています。
while not any( x in ('AND','OR','NOT') for x in list)
編集:
賛成票をありがとうございます。ただし、AND、OR、NOTという単語がリストに含まれているかどうか、つまり3つのテストをテストするため、etarionのソリューションの方が優れています。
私のリストにある単語と同じ数のテストを行います。
EDIT2:
またあります
while not ('AND' in list,'OR' in list,'NOT' in list)==(False,False,False)
あなたの場合、('AND' and 'OR' and 'NOT')
は"NOT"
と評価され、リストに含まれている場合と含まれていない場合があります...
while 'AND' not in MyList and 'OR' not in MyList and 'NOT' not in MyList:
print 'No Boolean Operator'
私が質問を正しく理解すると、次のようなものを探しています:
>>> s = "a1 c2 OR c3 AND"
>>> boolops = ["AND", "OR", "NOT"]
>>> if not any(boolop in s for boolop in boolops):
... print "no boolean operator"
...
>>> s = "test"
>>> if not any(boolop in s for boolop in boolops):
... print "no boolean operator"
...
no boolean operator
>>>
それはそれがどのように機能するかではありません。
このビット('AND' and 'OR' and 'NOT')
は'NOT'
として評価されます。したがって、あなたのコードは以下と同等です::
リストに「NOT」ではない場合:「ブール演算子なし」を出力
あなたはこれを試すことができます:
一方、設定されていない( 'AND'および 'OR'および 'NOT')。union(list):print 'No boolean operator'