我有两个列表,例如:
a = ["mail1", "mail2", "mail3", "mail4"]
b = ["mail2", "mail5"]
我想检查列表b
中是否还有a
列表中的任何元素。
我想知道在没有for循环的情况下是否有办法(以及它是什么)。
此外,我想知道如何创建布尔值列表,其中每个值都是值a[i]
和b[i]
的比较结果,如:
[z for i, j in zip(a, b) z = i == j] # (just with the right syntax)
如果在某个地方z
, 1
将为i == j
,因此我可以检查数组是否有任何“真实”字样。值。
答案 0 :(得分:8)
优雅的方法是使用集合:
a = ["mail1", "mail2", "mail3", "mail4"]
b = ["mail2", "mail5"]
anb = set(a) & set(b)
print anb
if anb:
print True
>>> set(['mail2'])
>>> True
答案 1 :(得分:8)
您可以使用any
:
any(x in a for x in b)
这个生成器表达式的好处是any
只要生成器产生True
就会返回True
,即不会多余x in a
} lookups。
关于你的新问题:
[x == y for x,y in zip(a,b)]
答案 2 :(得分:0)
any函数采用可迭代的(See documentation here),因此答案应为any([x in a for x in b])