如何找到一个项目出现在字符串列表的列表的次数,而不使用计数器,或字典在python?



如果

animal = [['cat', 'cat', 'dog'], ['cat', 'cat', 'dog'], ['cat', 'cat', 'dog']] 

item_to_find = ['cat', 'dog']

我如何计算item_to_find中的每个字符串可以在animal中找到的次数?例如,对于'cat',答案是6,对于'dog',答案是3。我需要做到这一点,而不使用collectiouns.Counter或字典。我试图使用count,但它只适用于如果它是字符串列表,而不是字符串列表的列表。

我试过这样做:

for i in item_to_find:
print(animal.count(i))

但就像我说的,这只适用于字符串列表而不是字符串列表的列表

我的结果看起来像这样:[6, 3](作为一个列表)。

您可以使用迭代:

occurrences = [0] * len(item_to_find)
for sublist in animal:
for idx, item in enumerate(item_to_find):
occurrences[idx] += sublist.count(item)

现在出现的次数将是[6,3]。

使用sumcount来总结所有子列表中的计数:

>>> animal = [['cat', 'cat', 'dog'], ['cat', 'cat', 'dog'], ['cat', 'cat', 'dog']]
>>> item_to_find = ['cat', 'dog']
>>> [(item, sum(a.count(item) for a in animal)) for item in item_to_find]
[('cat', 6), ('dog', 3)]

如果您想避免使用count,您可以通过使用sum的嵌套生成器来实现:

>>> [(item, sum(i == item for a in animal for i in a)) for item in item_to_find]
[('cat', 6), ('dog', 3)]

如果您不想知道每个计数与哪个项对应,则将其设置为仅包含计数的列表,而不是包含项的元组:

>>> [sum(a.count(item) for a in animal) for item in item_to_find]
[6, 3]