在'for-loop语句'中使用'not'

时间:2013-09-11 18:30:02

标签: python if-statement for-loop

  1. 为什么不能在not声明中使用for? 假设objectlist都是可迭代的

  2. 如果你不能这样做还有另外一种方法吗?

  3. 以下是一个示例,但“显然”语法错误:

    tree = ["Wood", "Plank", "Apples", "Monkey"]
    
    plant = ["Flower", "Plank", "Rose"]
    
    for plant not in tree:
        # Do something
        pass 
    else:
        # Do other stuff
        pass
    

7 个答案:

答案 0 :(得分:4)

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

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

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

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

如您所见,我们发现objects中的元素不在列表中。

答案 1 :(得分:1)

如果objectslist是两个列表,并且您希望迭代不在objects中的list的每个元素,则需要以下内容:< / p>

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)

答案 2 :(得分: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

答案 3 :(得分: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

答案 4 :(得分: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()

您拥有的列表中的Foreach项目,您可以使用排除列表来检查它是否在list_to_compare中。

您还可以使用列表理解来实现此目的:

["it is inside the list" if x in (3, 4, 5) else "it is not" for x in (1, 2, 3)]

答案 5 :(得分:0)

如果符合以下条件,您可以将列表理解与内联结合使用:

>>> lst = [1, 2, 3, 4]
>>> objects = [1, 2, 5, 6]
>>> [i for i in objects if i not in lst]
[5, 6]

答案 6 :(得分:0)

另一种方式:

from itertools import ifilterfalse
for obj in ifilterfalse(set(to_exclude).__contains__, objects):
    # do something