首页 > 解决方案 > 列出在 Python 中滚动六面骰子的每次迭代

问题描述

我正在制作一个动画条形图,以显示滚动六面骰子的数字频率如何收敛,您滚动骰子的次数越多。我想在每次迭代后显示数字频率,为此我必须在另一个列表中获取该迭代的数字频率列表。这是到目前为止的代码:

import numpy as np
import numpy.random as rd

rd.seed(23)
n_samples = 3
freqs = np.zeros(6)
frequencies = []

for roll in range(n_samples):
  x = rd.randint(0, 6)
  freqs[x] += 1
  print(freqs)
  frequencies.append(freqs)

print()

for x in frequencies:
    print(x)

输出:

[0. 0. 0. 1. 0. 0.]
[1. 0. 0. 1. 0. 0.]
[1. 1. 0. 1. 0. 0.]

[1. 1. 0. 1. 0. 0.]
[1. 1. 0. 1. 0. 0.]
[1. 1. 0. 1. 0. 0.]

期望的输出:

[0. 0. 0. 1. 0. 0.]
[1. 0. 0. 1. 0. 0.]
[1. 1. 0. 1. 0. 0.]

[0. 0. 0. 1. 0. 0.]
[1. 0. 0. 1. 0. 0.]
[1. 1. 0. 1. 0. 0.]

上面三个列表确实显示了每次迭代后的数字频率。但是,当我尝试将列表附加到“频率”列表时,最后它只显示每次的最终数字频率,如以下三个列表所示。这让我很困惑,而且我对 Python 还很陌生。如何在输出的前三个列表中获得每个列表,在另一个列表中?提前致谢!

标签: pythonlistnumpyfor-loopappend

解决方案


您可以通过仅更改来做到这frequencies.append(freqs)一点frequencies.append(freqs.copy())freqs像这样,您可以制作一个独立于原始文件的副本freqs。改变freqs不会改变freqs.copy()

import numpy as np
import numpy.random as rd

rd.seed(23)
n_samples = 3
freqs = np.zeros(6)
frequencies = []

for roll in range(n_samples):

  x = rd.randint(0, 6)
  freqs[x] += 1
  print(freqs)
  frequencies.append(freqs.copy())
  print(frequencies)

print()

for x in frequencies:
    print(x)

推荐阅读