计算两个列表中值的出现次数

时间:2018-10-04 08:51:37

标签: python python-3.x

我正在使用python 3,但我遇到了这个问题:

ListA =[38,40,27,11,1,5,22,7,47,3,11]
ListB = [12,16,38,5,40,27,3]

我需要pyhon来计数ListB中的任何数字连续出现在ListA中的次数。 我正在使用公式ListA.insert(0,int(input(“input new number:”),因此在这种情况下的输出应为:3。 因为38、40和27是ListB中的数字,并且是ListA中的前3个数字。

如果没有匹配项(如果ListA中的第一个数字不在ListB中),则输出应为:0

4 个答案:

答案 0 :(得分:1)

类似

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

答案 1 :(得分:1)

您可以执行以下操作:

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中发现时,计数器才会增加计数。

答案 2 :(得分:0)

您可以先将ListB转换为集合,以进行有效的会员查找:

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

使用示例输入,count将变为:3

答案 3 :(得分:0)

一种非常简洁的方法是使用itertools.takewhile函数:

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)。而sum(1 for _ in <iterable>)只会对它们进行计数。