web-dev-qa-db-ja.com

使用方法:外出中

リストにブール演算子AND、OR、NOTとしてメンバーがないかどうかを確認しようとしています。

私が使う:

while ('AND' and 'OR' and 'NOT') not in list:
  print 'No boolean operator'

ただし、私の入力が:a1 c2 OR c3 AND、「ブール演算子なし」を出力します。これは、このループ文を使用することにより、このリストはブール演算子なしと見なされることを意味します。

誰かが修正を手伝ってくれることを願っています。

ありがとう、シンディ

9
CindyRabbit

データのボリュームがある場合、setsを使用すると高速で叫びます

セットを使用する場合は、isdisjoint()メソッドを使用して、演算子リストと他のリストの間の交差が空かどうかを確認します。

MyOper = set(['AND', 'OR', 'NOT'])
MyList = set(['c1', 'c2', 'NOT', 'c3'])

while not MyList.isdisjoint(MyOper):
    print "No boolean Operator"

http://docs.python.org/library/stdtypes.html#set.isdisjoint

7
gahooa

anding文字列は、あなたが思っていることを実行しません-anyを使用して、文字列がリストにあるかどうかを確認します。

while not any(Word in list_of_words for Word in ['AND', 'OR', 'NOT']):
    print 'No boolean'

また、単純なチェックが必要な場合は、if...よりもwhileの方が適している可能性があります。

3
etarion

'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
3
Sven Marnach

('AND' and 'OR' and 'NOT')'NOT'に評価されるため、リストにNOTがあるかどうかをテストしています。

2
Ned Batchelder
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)
1
eyquem

あなたの場合、('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'
0
gahooa

私が質問を正しく理解すると、次のようなものを探しています:

>>> 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
>>> 
0
ChristopheD

それはそれがどのように機能するかではありません。

このビット('AND' and 'OR' and 'NOT')'NOT'として評価されます。したがって、あなたのコードは以下と同等です::

リストに「NOT」ではない場合:「ブール演算子なし」を出力

あなたはこれを試すことができます:

一方、設定されていない( 'AND'および 'OR'および 'NOT')。union(list):print 'No boolean operator'

0
wisty