python - 优化三个数组上的现有 for 循环

标签 python arrays performance for-loop optimization

我有三个列表/数组:一个是 bool 值列表,另外两个是具有特定值的数组。 我的目标是循环遍历 bool 列表,如果值为 true,则取第一个数组的第 j 个值并将其安全地保存在解决方案数组中,如果值为 false,则取第二个数组的第 j 个值并将其安全放入解决方案数组中。

这是我现在的解决方案:

j = 0
for comp, i in zip(boolean_list,range(len(boolean_list))):
   if comp == False: 
      solutio_array[i] = first_array[j]
   else:
      solutio_array[i] = second_array[j]
   j += 1

对于 Python 来说,这看起来太复杂了,而且是 Fortran 风格的。所以我的问题是,如何在Python中更有效地解决这个问题?

感谢您的帮助!我想提高我的 Python 技能,但这种编码似乎太菜鸟了。

最佳答案

这些事情可以改进:

  1. 无需执行range(len(boolean_list))并将其与结果一起压缩。这就是 enumerate 的用途。
  2. 不需要j,因为总是i==j
  3. 不要比较 x == Truex == False - 这是不好的做法。只需执行 if x

此外,您遇到了一个错误 - 如果 compFalse,您的代码将从第一个数组获取,而不是从第二个数组获取。

总的来说,我会这样做:

for i, comp in enumerate(boolean_list):
    if comp:
        solutio_array[i] = first_array[i]
    else:
        solutio_array[i] = second_array[i]

或者,也许这个:

for i, comp in enumerate(boolean_list):
    source_array = first_array if comp else second_array
    solutio_array[i] = source_array[i]

另一方面,如果您要创建新的 solutio_array,则完全可以避免使用 i:

solutio_array = [first if comp else second
                 for first, second, comp
                 in zip(first_array, second_array, boolean_list)]

关于python - 优化三个数组上的现有 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51860382/

相关文章:

python - “裁剪” basemap (Python) 投影仅覆盖 1 个半球

java - android 夹板字符串

python - 为什么 struct.pack 在性能上有如此高的可变性?

c++ - 在 C++ 中,用另一个字符串替换字符串中所有出现的子字符串的最快方法是什么?

python - 如何过滤QComboBox的数据

python - Flask 重定向上传的文件 - 对关闭的文件进行 I/O 操作

php - 使用 MySQLI 获取列并转换为数组

c++ - 比 std::atomic<bool> 更便宜的替代品?

python - 参数化生成器?

php - 将数组转换为数组php中的键和值