为什么不能在not
声明中使用for
?
假设object
和list
都是可迭代的
如果你不能这样做还有另外一种方法吗?
以下是一个示例,但“显然”语法错误:
tree = ["Wood", "Plank", "Apples", "Monkey"]
plant = ["Flower", "Plank", "Rose"]
for plant not in tree:
# Do something
pass
else:
# Do other stuff
pass
答案 0 :(得分:4)
这是一种方法,使用集合并假设objects
和list
都是可迭代的:
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)
如果objects
和list
是两个列表,并且您希望迭代不在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