问题描述
我正在使用 Python 3,但我遇到了这个问题:
ListA = [38,40,27,11,1,5,22,7,47,3,11]
ListB = [12,16,38,5,40,27,3]
我需要计算ListB
中的任何数字ListB
出现在ListA
中的ListA
。
在这种情况下,输出应该是3
。
因为38,40和27分别是具有数字ListB
,并且首先在3个数字ListA
。
如果没有匹配项(如果ListA
的第一个数字不在ListB
),则输出应为: 0
。
1楼
就像是
counter = 0
for value in A:
if value in B:
counter += 1
else:
break
2楼
你可以这样做:
ListA =[38,40,27,11,1,5,22,7,47,3,11]
ListB = [12,16,38,5,40,27,3]
count = 0
for item_a in ListA:
if item_a in ListB:
count += 1
else:
break
print(count)
# 3
如果元素出现在ListA
前面并在ListB
找到,它只会增加计数器,否则会跳出循环。
3楼
一个非常简洁的方法是使用函数:
from itertools import takewhile
ListA = [38,40,27,11,1,5,22,7,47,3,11]
ListB = [12,16,38,5,40,27,3]
sum(1 for _ in takewhile(ListB.__contains__, ListA))
# 3
takewhile
将项目从ListA
因为它们包含在只要ListB
(38,40,27)。
将简单地计算它们。
4楼
您可以ListB
转换为集合以进行高效的成员资格查找:
setB = set(ListB)
for count, a in enumerate(ListA):
if a not in setB:
break
else:
count = len(ListA)
使用您的样本输入, count
将变为:3