Python|计算元组中列表的所有元素的出现次数
给定一个元组和一个列表作为输入,编写一个Python程序来计算元组中列表中所有项目的出现次数。
例子:
Input : tuple = ('a', 'a', 'c', 'b', 'd')
list = ['a', 'b']
Output : 3
Input : tuple = (1, 2, 3, 1, 4, 6, 7, 1, 4)
list = [1, 4, 7]
Output : 6
方法#1:朴素的方法
第一种方法是幼稚的方法。使用 for 循环并遍历给定列表并计算列表中每个元组项的出现次数。最后,返回计数。
# Python3 Program to count occurrence
# of all elements of list in a tuple
from collections import Counter
def countOccurrence(tup, lst):
count = 0
for item in tup:
if item in lst:
count+= 1
return count
# Driver Code
tup = ('a', 'a', 'c', 'b', 'd')
lst = ['a', 'b']
print(countOccurrence(tup, lst))
输出:
3
方法#2:使用计数器
从Python Collections 模块,导入计数器来解决给定的问题。计数器是一个容器,用于跟踪添加等效值的次数。将结果保存在 'counts' 中后,我们使用 for 循环并计算列表中每个项目在 'counts' 中出现的次数,并将其相加得到最终输出。
# Python3 Program to count occurrence
# of all elements of list in a tuple
from collections import Counter
def countOccurrence(tup, lst):
counts = Counter(tup)
return sum(counts[i] for i in lst)
# Driver Code
tup = ('a', 'a', 'c', 'b', 'd')
lst = ['a', 'b']
print(countOccurrence(tup, lst))
输出:
3
方法#3:使用集合
解决给定问题的另一种方法是使用集合数据结构。只需将给定列表转换为集合,即可删除所有重复项。现在,对于列表中的每一项,计算它在元组中出现的次数并将它们相加。
# Python3 Program to count occurrence
# of all elements of list in a tuple
def countOccurrence(tup, lst):
lst = set(lst)
return sum(1 for x in tup if x in lst)
# Driver Code
tup = ('a', 'a', 'c', 'b', 'd')
lst = ['a', 'b']
print(countOccurrence(tup, lst))
输出:
3
方法 #4:使用Python字典
获取元组的每个项目及其频率作为Python字典中的键:值对,然后使用 for 循环,对于列表的每个项目,计算其在元组中的出现并将它们相加。
# Python3 Program to count occurrence
# of all elements of list in a tuple
def countOccurrence(tup, lst):
dct = {}
for i in tup:
if not dct.get(i):
dct[i] = 0
dct[i] += 1
return sum(dct.get(i, 0) for i in lst)
# Driver Code
tup = ('a', 'a', 'c', 'b', 'd')
lst = ['a', 'b']
print(countOccurrence(tup, lst))
输出:
3
方法#5: Python numpy.in1d()
Python numpy 为我们提供了一种直接的方法来找到给定问题的解决方案,那就是numpy.in1d()
。此方法测试一维数组的每个元素是否也存在于第二个数组中。由于 list 也是一维数组,因此可以在此处应用此方法。
# Python3 Program to count occurrence
# of all elements of list in a tuple
import numpy as np
def countOccurrence(tup, lst):
return np.in1d(tup, lst).sum()
# Driver Code
tup = ('a', 'a', 'c', 'b', 'd')
lst = ['a', 'b']
print(countOccurrence(tup, lst))
输出:
3