擅长:python、mysql、java
<p>因此,python有一个非常方便的字典子类Counter,本质上,它在计算计数方面非常快。
我精心设计了以下内容:</p>
<pre><code>import random
from collections import Counter
prob = Counter([random.randint(1,6) for _ in range(10000)])
print(prob)
>> Counter({1: 1650, 2: 1750, 3: 1679, 4: 1546, 5: 1686, 6: 1689})
</code></pre>
<p>现在,问题是它只能在一个合理的大范围内工作。因此,为了避免创建中间列表,我们可以采用以下方法:
随机导入
从集合导入计数器</p>
<pre><code>prob = Counter()
for _ in range(10000000):
prob[random.randint(1,6)] += 1
print(prob)
>> Counter({1: 13084052,
2: 13087518,
3: 13090177,
4: 13086193,
5: 13081778,
6: 13085341})
</code></pre>
<p>编辑:添加第三个版本(基本上是第一个版本),放弃中间列表,使用更方便的生成器,正如<a href="https://stackoverflow.com/questions/48598645/better-approach-to-calculating-probablity-python/48598819?noredirect=1#comment84194126_48598819">@Mark Dickinson</a>建议的那样:</p>
<pre><code>import random
from collections import Counter
prob = Counter(random.randint(1,6) for _ in range(1000000))
print(prob)
>> Counter({1: 166503, 2: 166833, 3: 166531, 4: 166681, 5: 166846, 6: 166606})
</code></pre>