【问题标题】:How can I loop over true values in Python如何在 Python 中遍历真实值
【发布时间】:2017-12-04 13:29:42
【问题描述】:

我在 python 中有一个布尔数组,我想对值为“真”的单元格进行计算。目前我正在使用嵌套的 for 循环遍历所有单元格以找到具有真实值的单元格。但是,运行程序需要很多时间。我想知道是否有更快的方法来做到这一点?

for i in range (0,latstep):  
    for j in range (0,lonstep):     
        if coastline[i,j] == True:
        ... 

感谢您的帮助!

【问题讨论】:

  • coastline的内容是什么?
  • coastline[i,j] 无效
  • 感谢您的快速答复!海岸线是一个二维布尔数组。在海岸线上的位置是真的我想用其他数组做一个计算。
  • @BilltheLizard,是的,谢谢!我找不到那个

标签: python arrays loops boolean


【解决方案1】:

您可以考虑使用concurrent.map() 或类似方法来并行处理数组元素。总是假设之间没有依赖关系 元素。

另一种可能性是在您最初计算“真实”值时维护它们的列表:

coastlineCache = []

c = foo()
coastline[i][j] = c

if (c):
    coastlineCache.append(c)

// later

for (c in coastlineCache):
    process_true_item(c)

如果,正如您在上面提到的,您需要数组索引,请将它们缓存为元组:

coastlineCache = []

c = foo()
coastline[i][j] = c
if (c):
    coastlineCache.append((i, j))

// later

for (c in coastlineCache):
    process_true_item(c[0], c[1]) # e.g. (i, j)

【讨论】:

  • 感谢@JarvisCochrane,这太完美了,因为我还需要在代码中进一步使用它!
【解决方案2】:

您可以使用嵌套列表推导,在较小的输入大小上,每个推导比通用 for 循环稍快:

final_list = [[foo(b) for b in i if b] for i in coastline]

【讨论】:

    猜你喜欢
    • 2016-11-22
    • 1970-01-01
    • 2012-06-07
    • 2018-03-16
    • 2011-08-09
    • 2012-01-28
    • 1970-01-01
    • 2023-03-31
    • 2019-09-30
    相关资源
    最近更新 更多