在Python中,给定一个项目,如何在列表中计算它的出现次数?
一个相关但不同的问题是计算集合中每个不同元素的出现次数,将字典或列表作为直方图结果而不是单个整数。有关该问题,请参阅使用字典统计列表中的项目。
在Python中,给定一个项目,如何在列表中计算它的出现次数?
一个相关但不同的问题是计算集合中每个不同元素的出现次数,将字典或列表作为直方图结果而不是单个整数。有关该问题,请参阅使用字典统计列表中的项目。
当前回答
为什么不使用Pandas?
import pandas as pd
my_list = ['a', 'b', 'c', 'd', 'a', 'd', 'a']
# converting the list to a Series and counting the values
my_count = pd.Series(my_list).value_counts()
my_count
输出:
a 3
d 2
b 1
c 1
dtype: int64
如果您正在查找特定元素的计数,例如a,请尝试:
my_count['a']
输出:
3
其他回答
给定一个项目,我如何在Python的列表中计算它的出现次数?
下面是一个示例列表:
>>> l = list('aaaaabbbbcccdde')
>>> l
['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'e']
列表计数
有list.count方法
>>> l.count('b')
4
这适用于任何列表。元组也有这种方法:
>>> t = tuple('aabbbffffff')
>>> t
('a', 'a', 'b', 'b', 'b', 'f', 'f', 'f', 'f', 'f', 'f')
>>> t.count('f')
6
集合。计数器
然后是collections.Counter。您可以将任何可迭代项转储到Counter中,而不仅仅是列表,Counter将保留元素计数的数据结构。
用法:
>>> from collections import Counter
>>> c = Counter(l)
>>> c['b']
4
计数器基于Python字典,它们的键是元素,因此键需要是可散列的。它们基本上类似于允许冗余元素进入其中的集合。
进一步使用集合。计数器
您可以从计数器中添加或减去可迭代项:
>>> c.update(list('bbb'))
>>> c['b']
7
>>> c.subtract(list('bbb'))
>>> c['b']
4
您还可以使用计数器执行多组操作:
>>> c2 = Counter(list('aabbxyz'))
>>> c - c2 # set difference
Counter({'a': 3, 'c': 3, 'b': 2, 'd': 2, 'e': 1})
>>> c + c2 # addition of all elements
Counter({'a': 7, 'b': 6, 'c': 3, 'd': 2, 'e': 1, 'y': 1, 'x': 1, 'z': 1})
>>> c | c2 # set union
Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1, 'y': 1, 'x': 1, 'z': 1})
>>> c & c2 # set intersection
Counter({'a': 2, 'b': 2})
愚蠢的回答,求和
有很好的内置答案,但这个例子有点指导意义。在这里,我们对字符c等于“b”的所有情况求和:
>>> sum(c == 'b' for c in l)
4
对于这个用例来说不是很好,但是如果你需要有一个可迭代的计数,其中case为True,那么对布尔结果求和是非常好的,因为True等于1。
为什么不是熊猫?
另一个答案是:
为什么不使用熊猫?
Pandas是一个通用库,但它不在标准库中。将其添加为需求是非常重要的。
列表对象本身以及标准库中都有针对该用例的内置解决方案。
如果您的项目还不需要panda,那么仅将其作为此功能的需求将是愚蠢的。
或者,您也可以自己实现计数器。我是这样做的:
item_list = ['me', 'me', 'you', 'you', 'you', 'they']
occ_dict = {}
for item in item_list:
if item not in occ_dict:
occ_dict[item] = 1
else:
occ_dict[item] +=1
print(occ_dict)
输出:{“我”:2,“你”:3,“他们”:1}
x = ['Jess', 'Jack', 'Mary', 'Sophia', 'Karen',
'Addison', 'Joseph','Jack', 'Jack', 'Eric', 'Ilona', 'Jason']
the_item = input('Enter the item that you wish to find : ')
how_many_times = 0
for occurrence in x:
if occurrence == the_item :
how_many_times += 1
print('The occurrence of', the_item, 'in', x,'is',how_many_times)
创建了一个名字列表,其中重复了“Jack”这个名字。为了检查它的发生情况,我在名为x的列表中运行了一个for循环。每次迭代时,如果循环变量的值与从用户接收的值相同,并存储在变量the_item中,那么变量how_many_times将递增1。在获得某种价值之后。。。我们打印how_many_times,它存储单词“jack”出现的值
如果您使用的是Python 2.7或3.x,并且希望每个元素的出现次数,请使用Counter:
>>> from collections import Counter
>>> z = ['blue', 'red', 'blue', 'yellow', 'blue', 'red']
>>> Counter(z)
Counter({'blue': 3, 'red': 2, 'yellow': 1})
要计算具有共同类型的不同元素的数量,请执行以下操作:
li = ['A0','c5','A8','A2','A5','c2','A3','A9']
print sum(1 for el in li if el[0]=='A' and el[1] in '01234')
给予
3,而不是6