簡體   English   中英

如何在Python3中以更快的方式查找列表的子數組?

[英]How to find sub-arrays of a list in a more faster way in Python3?

這是我的代碼:

A = list(map(int, input().rstrip().split()))
sub = [A[i:i+j] for i in range(0,len(A)) for j in range(1,len(A)-i+1)]
print(sub)

我想知道是否有一種方法可以比我更快地找到子陣列。 列表“ A”中的輸入數量可以是1到10**5 ,而輸入的值可以是1到10**9

編輯:

輸入數據的一些樣本:

[1,0,3,0,4]

[1,10,10]

[2,6,13,4,3,2]

注意:這只是小樣本,不是真正的大樣本

如果您不需要一次使所有結果都存在(例如,您只需要打印每個結果,就可以忽略它),則可以將代碼從O(N**3)加速到O(N**2) ,只需重復使用相同的列表,而不是在每次迭代時將它們重新切片即可:

def print_subsequences(A):
    for i in range(len(A)):
        result = []
        for j in range(i,len(A)):
            result.append(A[j]
            print(result)

輸出示例:

>>> print_subsequences([1,2,3,4])
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
[2]
[2, 3]
[2, 3, 4]
[3]
[3, 4]
[4]

您還可以使函數成為生成器,而不是輸出result s。 但這有點危險,因為將要產生的列表並非都相互獨立。 如果使用者嘗試從示例輸出中保存[2]列表,他們會發現它在下一次迭代后更改為包含[2,3] ,並在迭代后進一步更改為[2,3,4]之后。 如果他們仍然需要裸露的[2]清單,那可能是一個非常不愉快的驚喜。 如果您要使用該路線,則需要非常清楚地記錄生成器。

暫無
暫無

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

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