我正在运行下面提到的python代码,控制台会显示类似这样的内容:
sim是:[1 0 1 1 1 1 1 0 1 0]
counter_one是3
counter_zero为7
但是让我感到奇怪的是,当我不时地再次运行代码时,计数器是正确的。
import numpy as np
from fractions import Fraction
elements = np.array([1, 0])
prob_of_functioning = Fraction(2, 3)
prob_of_failing = Fraction(1, 3)
probabilities = [prob_of_functioning, prob_of_failing]
sim = np.random.choice(elements, 10, p=probabilities)
print("sim is:")
print(sim)
counter_one = 0
counter_zero = 0
for k in sim:
if sim[k] == 1:
counter_one = (counter_one + 1)
if sim[k] == 0:
counter_zero = (counter_zero + 1)
print("counter_one is")
print(counter_one)
print("counter_zero is")
print(counter_zero)
答案 0 :(得分:2)
在python中,for循环无法像C / Java语言那样工作,例如
for (int k=0; k<len(sim); k++)
迭代sim
本身的元素。
所以,您可以直接写
for value in sim:
if value == 1:
count_ones += 1
elif value == 0:
count_zeros += 1
要遍历索引,请写
for index in range(len(sim)):
代替
或更(惯用的)
for index, value in enumerate(sim)
遍历值和索引
答案 1 :(得分:0)
在此代码块中:
for k in sim:
if sim[k] == 1:
counter_one = (counter_one + 1)
if sim[k] == 0:
counter_zero = (counter_zero + 1)
您似乎认为k
是一个索引。不是。 k
代表sim
range(len(sim))
将为您解决此问题,但是对这样的数组进行迭代是不明智的。重新格式化代码以按元素而不是按索引工作。