-1
  1. 为什么不能notfor语句中使用 a?假设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

这是一种方法,使用集合并假设两者objectslist都是可迭代的:

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

首先,您不应该调用变量list,这会与内置名称冲突。现在解释一下:表达式set(objects).difference(lst)执行一组差异,例如:

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

如果objectsandlist是两个列表,并且您想遍历其中的每个元素objectsnot in list,则需要以下内容:

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

这会遍历所有 inobjects并且只处理那些不在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

在以下情况下,您可以将列表推导与内联结合使用:

>>> lst = [1, 2, 3, 4]
>>> objects = [1, 2, 5, 6]
>>> [i for i in objects if i not in lst]
[5, 6]
于 2013-09-11T18:45:57.690 回答
0

这是实现您想要的简单方法:

 list_i_have = [1, 2, 4]  
 list_to_compare = [2, 4, 6, 7]

 for l in list_i_have:
     if l not in list_to_compare:
         do_something()
     else:
         do_another_thing()

对于您拥有的列表中的每个项目,您可以有一个排除列表来检查它是否在 list_to_compare 内。

您也可以通过列表理解来实现这一点:

["it is inside the list" if x in (3, 4, 5) else "it is not" for x in (1, 2, 3)]
于 2013-09-11T18:42:36.233 回答
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 回答
0

另一种方式:

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