【问题标题】:How to speed up nested for loop without import any function如何在不导入任何函数的情况下加速嵌套 for 循环
【发布时间】:2017-05-05 15:10:52
【问题描述】:

如何在不导入任何函数的情况下减少嵌套循环的处理时间?我的程序非常快,但是编写矩阵需要很长时间。我尝试使用range 和我在网上找到的其他建议,但它仍然是一样的。

for i in matrix:
    string = ''
    for j in i:
        if j not in path and j != 'N':
             string += '_'
        elif j in path and j != 'N':
             string += '+'
        else:
             string += 'N'
f.write(string+"\n")

谢谢

【问题讨论】:

  • 什么是path?如果它可能是 set,它应该可以更快地启动。
  • matrixpath 包含什么?通过重复连接构建字符串通常很糟糕。非基于哈希的容器中的成员资格测试也很慢。
  • 谢谢 zipa,是的,我使用了 set,它帮助很大
  • 不要在循环中的字符串上使用+=!它可能似乎很快,但it has trivial failure cases 通常不能依赖。列个清单并致电join,就像@tzaman 展示的那样。
  • 嗨 Veedrac,非常感谢您让我知道!我有一个错误的印象是 += aString 更快,所以我几乎在我的每个程序中都使用它

标签: performance python-3.x for-loop matrix


【解决方案1】:

如果path 是字符串或列表,您可以将其转换为集合以便更快地查找:

path_set = set(path)

接下来,您可以使用join 函数结合生成器表达式来避免重复的字符串连接:

output = ''.join('N' if j=='N' else '+' if j in path_set else '_' 
                 for i in matrix 
                 for j in i)

还请注意,通过重新排序条件,您可以避免必须执行两次path 测试;此外,通过首先检查'N'(便宜得多),您有时可以完全跳过它。

【讨论】:

  • 嗨 tzaman,是的!你是对的,路径是一个列表。非常感谢您的出色表达,这对我来说是全新的。我稍微修改了它以适应我的程序,只用了 3 秒。再次感谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 2021-09-06
  • 1970-01-01
相关资源
最近更新 更多