Python for循环列表理解

标签 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’对象不可订阅”和“+ 不支持的操作数类型:‘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() 的参数并迭代它的长度,同时仅对 0.9 和 1.8 之间的条件发现的那些值递增 1。我正在尝试检查 n 个随机数中的每一个是否符合该条件。然后只对那些为真的求和。

顺便说一句,答案应该在 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

这相当于:

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 .

请注意,我为您将其设为生成器表达式,无需先存储列表。

关于Python for循环列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13435064/

相关文章:

batch-file - 在 for/f 批处理命令中使用空格

python - 对于 Pandas 的 value_counts() 循环(嵌套)

python - 使用带有列表理解的嵌套 for 循环构建列表

python - 如何并排制作两个地 block

python - Scikit学习中的线性回归和梯度下降?

python - ValueError 时间数据 'Fri Mar 11 15:59:57 EST 2016' 与格式 '%a %b %d %H:%M:%S %Z %Y' 不匹配

python - 列表推导式有效但 for 循环无效——为什么?

python - 如何设置 cherrypy 服务器发送的事件

python - 如果值是字符串列表,如何引用字典中的值?

python - 列表理解以查找匹配的括号