sta*_*ser 5 python for-loop list-comprehension
我是Python的初学者,正在教自己列表理解.几乎所有我已经转换为列表理解的for循环代码我都做得很好,但我非常坚持我认为是一个相当简单的循环.
n = 10000
def sim(y):
count = 0
for i in range(10000):
if 0.9 <= y[i] <= 1.8:
count += 1
probability = count/10000.0
print("P(a < x <= b) : {0:8.4f}".format(probability))
print ("\t case: \n"),sim([0.25 if random() < 0.8 else 1.5 for r in range(n)])
Run Code Online (Sandbox Code Playgroud)
到目前为止,我一直在尝试对以下内容进行修改,但是所有错误都与使用列表相关,例如"'int'对象是unsubscriptable"和"不支持的操作数类型+":'int'和'list' ".
def sim(y):
c4 = sum([y for range(y) in range(len(y)) if 0.9 < y[i] <= 1.8])/10000
print("P(a < x <= b) : {0:8.4f}".format(c4))
Run Code Online (Sandbox Code Playgroud)
目的是基本上将传递给sim()的参数传递给它并在其长度上迭代,同时仅增加1,因为只有那些在0.9和1.8之间的条件下找到的值为true.我正试图检查那个条件中的每个n个randoms.然后总结那些真实的.
顺便说一下,答案应该在0.2左右 - 如果你想检查一下,只考虑1.5是唯一适合0.9和1.8之间的方法.
我正在学习,感谢你的耐心等待.
你仍然需要为每个循环提供一个表达式,而你的for y in部分却相当失控.以下作品:
c4 = sum(1 for i in y if 0.9 < i <= 1.8) / 10000.0
Run Code Online (Sandbox Code Playgroud)
这相当于:
count = 0
for i in y:
if 0.9 < i <= 1.8:
count += 1
c4 = count / 10000.0
Run Code Online (Sandbox Code Playgroud)
也许是10000.0应该的float(len(y)),但是你的例子并不完全清楚.
我们使用1000.0或float(len(y))避免使用整数除法,这将导致0作为答案.或者,您可以使用默认情况下from __future__ import division使/除法运算符使用浮点除法,请参阅PEP 238.
请注意,我为您创建了一个生成器表达式,无需先存储列表.