【发布时间】:2014-05-30 22:53:28
【问题描述】:
例如,假设给定的整数列表:
int_list = list(range(-10,10))
[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
如果int_list 中的任何给定两个值总和等于给定 int,例如2,最有效的方法是什么?
我在今天早上的一次技术电话采访中被问到如何有效地处理这种情况,int_list 说有 1 亿个项目(我漫无目的地回答:/)。
我的第一个想法是:
from itertools import combinations
int_list = list(range(-10,10))
combo_list = list(combinations(int_list, 2))
desired_int = 4
filtered_tuples = list(filter(lambda x: sum(x) == desired_int, combo_list))
filtered_tuples
[(-5, 9), (-4, 8), (-3, 7), (-2, 6), (-1, 5), (0, 4), (1, 3)]
这甚至不适用于只有 range(-10000, 10000) 的范围
另外,有没有人知道一个好的在线 Python 性能测试工具?
【问题讨论】:
-
请参阅stackoverflow.com/a/12775802/1899640 以获取此问题的重复项列表
-
顺便说一下,如果这是列表采用单个参数 n 的范围(-n,n)的狭窄情况,那么我相信我的第二个答案是最好的和最高效的一。如果这是任何可能的整数列表的更一般情况,那么亚当的答案是最好的。
-
样本范围就是这样,一个样本。现实世界的情况是任何可能的整数列表。
-
@AaronHall 给你。也就是说,我从您的第二个答案中删除了“-1”,因为 OP 发现它很有用(尽管它仅涵盖特定情况并且不提供 real 答案)。