python - 如何计算从列表中打印特定值的次数?
问题描述
我做了一个简单的投币器程序,命名为翻转硬币并打印出价值。
我的目标是打印大量掷硬币并记录正面朝上的次数和反面朝上的次数。但显然我不能,因为我不知道如何计算它落在特定值上的次数。
import random
heads_or_tail = ['heads', 'tail']
def flip_coin():
flip_coin = random.choice(heads_or_tail)
print(flip_coin)
for x in range(100):
flip_coin()
解决方案
该collections
模块有一个很棒的功能,称为Counter
:
import collections
import random
heads_or_tail = ['heads', 'tail']
def flip_coin():
flip_coin = random.choice(heads_or_tail)
return flip_coin
cnt = collections.Counter()
for x in range(100):
cnt[flip_coin()] += 1
输出:
>>> cnt
Counter({'tail': 50, 'heads': 50})
或者,您可以只使用普通的dict
,但这需要更多的样板代码:
# Alternatively, you could just use a `dict`
dict_cnt = {}
for x in range(100):
fc = flip_coin()
if fc in dict_cnt:
dict_cnt[fc] += 1
else:
dict_cnt[fc] = 1
请记住,最 Python 的做法是使用其他人已经完善的库——尤其是来自 Python 标准库的库。因此,在计算时,我建议您使用collections.Counter
.
此外,Counter
还有更多很酷的功能,您可以在docs中查看。
正如其他人所提到的,您可以使用传递给Counter
构造函数的生成器,因为它是可迭代的 - 这将显着缩短您的代码:
import collections
import random
flip_gen = (random.choice(['heads', 'tails']) for _ in range(100))
cnt = collections.Counter(flip_gen)
>>> cnt
Counter({'heads': 51, 'tail': 49})
推荐阅读
- r - 使用 R dplyr 汇总数据
- marklogic - 使用 xdmp:lock-acquire() 函数锁定文档时出现问题
- javascript - 通过 DOM 插入 JS 播放器失败
- uml - ERD 到类图
- mongodb - 为什么 Mongo 字符串比较将等效字符串读取为不等价?pymongo
- asp.net-core - 项目的目标是运行时“win7-x64”,但没有为“Microsoft.NETCore.App”包解析任何特定于运行时的包
- c# - 如何在 Angular 中创建 (Azure CLI) 命令行应用程序
- pandas - 熊猫数据框无法为列指定列表值
- javascript - 如何将元素拖动到上、下、右、左方向?
- pytorch - torch.nn.functional.gumbel_softmax 的输入