python - 提高 Python 嵌套 for 循环的性能

标签 python performance loops

我有两组数字,每组数字都在我的 Python 脚本的列表中。对于第一个列表中的每个数字,我需要查看第二个列表中是否有任何数字大于它。我只需要 n2 大于 n1 的次数。 (例如,如果numset1[7,2]并且numset2[6,9],我只需要3) 现在我正在这样做 - 遍历每个 n1 并检查每个 n2 是否大于它:

possibilities = [(n1<n2) for n1 in numset1 for n2 in numset2]
numPossibilities = sum(possibilities)

目前,这是我的脚本中最慢的部分,特别是在处理较大的数据集(numset1 和 numset2 包含数千个数字)时。我确信有某种方法可以提高效率,只是不知道如何实现。

最佳答案

numset2 进行排序,然后迭代 numset1,但对 numset2 使用二分搜索,例如使用 bisect 模块:http://docs.python.org/2/library/bisect.html

import bisect
# your code here
numset2.sort()
L = len(numset2)
numPossibilities = sum([bisect.bisect_right(numset2,n1) < L for n1 in numset1])

另请注意,您的原始代码不会计算您在第二句话中所要求的内容 - 对于 numset1 中的每个元素,它会计算 中有多少个元素>numset2 大于此元素,而不是是否有符合条件的元素。

要匹配您的原始代码,请执行以下操作:

numPossibilities = sum([L - bisect.bisect_right(numset2,n1) for n1 in numset1])

关于python - 提高 Python 嵌套 for 循环的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13755239/

相关文章:

python - BFS 解决方案找到最不完美的正方形

python - 如何从松弛的用户那里获取输入以进一步进行?

在 32 位和 64 位中使用 Entity Framework 的性能差异

performance - blazemeter 如何计算 hits/sec?

java - 如何以某种方式循环我的主要方法?

python - 多次运行和退出 PyQt 应用程序

python - 使用 TLS 的 Django LDAP3 安全性 : am I secure?

performance - CUDA:示例代码具有 300% 多 GPU 缩放/性能优化

Java:带有 Callables 的 ExecutorService:在循环中重用同一个池?需要关机吗?

javascript - 简单 HTML 表单创建循环中的永恒循环