簡體   English   中英

如何通過減少循環和條件來優化我的代碼

[英]How can i optimize my code by reducing the looping and conditioning

這是我的問題:

給定一個數字列表和數字“k”,返回列表中的任意兩個數字是否加起來為“k”

例如,給定[1,2,5,6]其中k是 7,返回True因為 2+5 是 7。

這是我的代碼; 我想要一些關於如何矢量化它的幫助。

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

矢量化似乎在這里沒有幫助。

但是,我提出了一種新算法,將復雜度從 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

使用 itertools.combinations(L, 2) 為您提供所有 2 個長度的序列

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM