Python for循环列出理解

时间:2012-11-17 21:43:28

标签: 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)])

到目前为止,我一直在尝试对以下内容进行修改,但是所有错误都与使用列表有关,例如“'int'对象是unsubscriptable”和“不支持的操作数类型+:'int'和名单'”。

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))

目的是基本上将参数传递给sim()并迭代它的长度,同时递增1,只有那些在0.9和1.8之间的条件下找到的真值。我正试图检查那个条件中的每个n个randoms。然后总结那些真实的。

顺便说一句,答案应该在0.2左右 - 如果你想检查一下,只考虑1.5是唯一适合介于0.9和1.8之间的方法。

我很感激你的耐心,因为我正在学习。

1 个答案:

答案 0 :(得分:6)

您仍然需要为每个循环提供一个表达式,而您的for y in部分却相当失控。以下作品:

c4 = sum(1 for i in y if 0.9 < i <= 1.8) / 10000.0

这相当于:

count = 0
for i in y:
    if 0.9 < i <= 1.8:
        count += 1
c4 = count / 10000.0

也许10000.0应该是float(len(y)),但您的例子并不完全清楚。

我们使用1000.0float(len(y))来避免使用整数除法,这会导致0作为答案。或者,您可以使用from __future__ import division默认情况下/除法运算符使用浮点除法,请参阅PEP 238

请注意,我为你制作了一个生成器表达式,不需要先存储列表。