1

不久前我自学了python,我发现自己一直在做这个逻辑......

如果 listB 中 listA 的任何元素,那么等等等等……

我会将其编码为:

for i in listA: 
    if i in listB:
        do something

鉴于我遇到这种情况的频率,我认为必须有一种更有效的编码方式?

提前致谢。

4

3 回答 3

4

是的,any()功能:)。

if any(i in listB for i in listA):
    do something

这是假设你想做"do something" 一次。如果您想实际做某事i(如果它在 中listB),那么像您所做的那样使用 for 循环。

any(i in listB for i in listA). 几乎等同于:

for i in listA:
    if i in listB:
        return True
return False
于 2013-10-07T00:07:23.557 回答
2

目前尚不清楚您是否需要执行一次,或者为 listA 中的每个元素执行一次。

所以,如果你需要做一次,把它们转换成一个集合,看看交集是否大于 0:

if (set(listA)).intersection(set(listB)):
    do something

如果您需要为每个元素做某事,跳过重复的值:

intersection = (set(listA)).intersection(set(listB))
for el in intersection:
    do something

而且,如果您需要为每个元素做某事,无论它是否重复:

for element in listA:
    if element in listB:
        do something
于 2013-10-07T00:08:28.520 回答
0

尝试:

for i in list(set(listA).intersection(listB)):
    #do something
    pass
于 2013-10-07T01:38:29.787 回答