-1
  1. ステートメントnotで aを使用できないのはなぜですか? と の両方が反復可能であるとfor仮定しますobjectlist

  2. それができない場合、別の方法はありますか?

以下に例を示しますが、「明らかに」構文エラーです。

tree = ["Wood", "Plank", "Apples", "Monkey"]

plant = ["Flower", "Plank", "Rose"]

for plant not in tree:
    # Do something
    pass 
else:
    # Do other stuff
    pass
4

7 に答える 7

4

objectsセットを使用し、との両方listが反復可能であると仮定する 1 つの方法を次に示します。

for x in set(objects).difference(lst):
    # do something

まず第一にlist、組み込みの名前と衝突する variable を呼び出さないでください。説明: 式set(objects).difference(lst)set differenceを実行します。次に例を示します。

lst = [1, 2, 3, 4]
objects = [1, 2, 5, 6]
set(objects).difference(lst)
=> set([5, 6])

ご覧のとおりobjects、リストにない要素が見つかりました。

于 2013-09-11T18:34:31.417 に答える
1

objectsとが 2 つのリストで、 にないlistのすべての要素を反復処理する場合は、次のようにします。objectslist

for object in objects:
    if object not in list:
        do_whatever_with(object)

これは のすべてをループし、objectsにないものだけを処理しますlist。これはあまり効率的ではないことに注意してください。list効率的なinチェックのために次のセットを作成できます。

s = set(list)
for object in objects:
    if object not in s:
        do_whatever_with(object)
于 2013-09-11T18:35:47.973 に答える
0

そして別の方法:

from itertools import ifilterfalse
for obj in ifilterfalse(set(to_exclude).__contains__, objects):
    # do something
于 2013-09-11T18:49:26.463 に答える
0

いくつかのことを混乱させているようです。ループは、forシーケンス (リスト、タプル、文字列の文字、セットなど) を反復処理するために使用されます。not演算子はブール値を逆にします。いくつかの例:

>>> items = ['s1', 's2', 's3']
>>> for item in items:
...   print item
...
s1
s2
s3
>>> # Checking whether an item is in a list.
... print 's1' in items
True
>>> print 's4' in items
False
>>>
>>> # Negating
... print 's1' not in items
False
>>> print 's4' not in items
True
于 2013-09-11T18:37:06.437 に答える
0

少数を除いてリストを反復処理する場合:

original = ["a","b","c","d","e"]
to_exclude = ["b","e"]
for item [item for item in orginal if not item in to_exclude]: print item

プロデュース:

a
c
d
于 2013-09-11T18:37:40.847 に答える