[英]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.