例如,假设给定的int列表:

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,那么最有效的方法是什么?
今天早上,我在一次技术电话采访中被问及如何有效地处理这个场景,比如说,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)]

它甚至不能在int_list的范围内工作
另外,有人知道一个好的在线Python性能测试工具吗?

最佳答案

对于任何整数A而言,至多有一个整数B将相加为等于整数N。浏览列表、进行算术运算和进行成员资格测试以查看B是否在集合中似乎更容易。

int_list = set(range(-500000, 500000))
TARGET_NUM = 2

def filter_tuples(int_list, target):
    for int_ in int_list:
        other_num = target - int_
        if other_num in int_list:
            yield (int_, other_num)

filtered_tuples = filter_tuples(int_list, TARGET_NUM)

请注意,这将复制结果。例如,(-2, 4)(4, -2)的单独响应。可以通过更改函数来解决此问题:
def filter_tuples(int_list, target):
    for int_ in int_list:
        other_num = target - int_
        if other_num in int_list:
            set.remove(int_)
            set.remove(other_num)
            yield (int_, other_num)

关于python - 返回列表中任何两个项目的元组,如果相加等于给定的int,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23964488/

10-12 01:17