当前位置: 代码迷 >> python >> 在另一个列表中找到多少个列表中的前导条目
  详细解决方案

在另一个列表中找到多少个列表中的前导条目

热度:105   发布时间:2023-07-16 09:47:54.0

我正在使用 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

就像是

counter = 0
for value in A:
    if value in B:
        counter += 1
    else:
        break

你可以这样做:

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找到,它只会增加计数器,否则会跳出循环。

一个非常简洁的方法是使用函数:

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)。 将简单地计算它们。

您可以ListB转换为集合以进行高效的成员资格查找:

setB = set(ListB)
for count, a in enumerate(ListA):
    if a not in setB:
        break
else:
    count = len(ListA)

使用您的样本输入, count将变为:3

  相关解决方案