【发布时间】:2013-11-26 19:45:48
【问题描述】:
这是我在here 发布的问题的后续问题,但这是一个非常不同的问题,所以我想我会单独发布。
我有一个 Python 脚本,它读取一个非常大的数组,我需要优化每个元素的操作(请参阅引用的 SO 问题)。我现在需要将输出数组拆分为两个单独的数组。
我有代码:
output = [True if (len(element_in_array) % 2) else False for element_in_array in master_list]
根据element_in_array 的长度是奇数还是偶数,输出一个长度为len(master_list) 的数组,由True 或False 组成。我的问题是我需要将master_list 拆分为两个数组:一个数组包含element_in_array 对应于output 中的True 元素,另一个包含element_in_array 对应于@987654331 output中的@元素。
这显然可以使用传统的数组运算符(例如append)来完成,但我需要尽可能优化和尽可能快。我的master_list 中有数百万个元素,那么有没有办法在不直接循环master_list 并使用append 创建两个新数组的情况下完成此操作。
任何建议将不胜感激。 谢谢!
【问题讨论】:
-
因此,您将所有真值(也就是偶数)附加到第一个列表中。应该是一个for循环,也就是O(n),这里真的不能比线性时间循环快。
-
如果你有一个非常大的数组,你能用NumPy数组代替纯Python列表吗?如果是这样,您可能可以用更简单的代码来完成它,运行时间大约是 1/10,并且使用大约 1/4 的存储空间。
-
附带说明,
True if foo else False比bool(foo)更简单(而且通常更快)。
标签: python optimization for-loop numpy iterator