我如何通过减少循环和条件来优化代码

时间:2019-01-31 04:10:29

标签: python algorithm

这是我的问题:

  

给出一个数字列表和数字“ k”,返回列表中是否有两个数字加起来等于“ k”

例如,给定[1,2,5,6],其中k为7,则由于2 + 5为7,因此返回True

这是我的代码;我需要一些有关如何向量化的帮助。

L = [3,4,1]
k = 5
for i in L:
    for j in L:
        if i+j == k:
            print("True")
            break
    if i+j == k:
        break

2 个答案:

答案 0 :(得分:-1)

矢量化似乎在这里没有帮助。

但是,我提出了一种新算法,可以将复杂度从O(N ^ 2)降低到O(N):

L = [3,4,1]
Lset = set(L)
k = 5

for x in L:
    if k - x in Lset:
        print("True")
        break

我认为该算法是不言自明的! :)它基本上遍历L,并针对每个数字检查列表中是否存在其“免费”(满足x + complimentary == k的数字)(已转换为一组,以降低会员检查费用) )。

如果您不想计算L = [1]k = 2之类的案件,则可以执行以下操作:

for x in L:
    if k - x in Lset:
        if k - x == x and L.count(x) < 2:
            continue
        print("True")
        break

答案 1 :(得分:-1)

使用itertools.combinations(L,2)给出所有2个长度序列