我有一個索引范圍串列,結構為[(2, 4), (6, 7)]. 我還有一個包含 10 個元素的陣列,所有元素都是 False 值:
[False, False, False, False, False, False, False, False, False, False]
我想做的是修改這些范圍之間的值并使它們為真。所以最終的名單是:
[False, True, True, True, False, True, True, False, False, False]
注意:串列的索引不是從零開始的。
我正在考慮基于兩個 for 的解決方案,但它具有 N^2 復雜性:
for i in range(len(list_ranges)):
for j in range(len(my_list)):
if (j >= list_ranges[i][0] or j <= list_ranges[i][1]):
my_list[j] = True
如何提高演算法的復雜度?
uj5u.com熱心網友回復:
您只能更新串列的相應部分(就地修改串列,您已經在使用my_list)。如果設定的專案數相等,則串列集合切片是O(K) 操作。
>>> list_ranges = [(2, 4), (6, 7)]
>>> my_list = [False, False, False, False, False, False, False, False, False, False]
>>> list_ranges = [(2, 4), (6, 7)]
>>> for start, end in list_ranges:
... my_list[start-1:end] = [True] * (end - start 1)
...
>>> my_list
[False, True, True, True, False, True, True, False, False, False]
請注意,這將在記憶體中啟動中間串列,然后將它們分配給原始串列中的相應索引。
其次,如果范圍串列相對較小,那么我們可以檢查索引是否在給定的任何范圍內。
>>> def solve(indices, my_list):
... return [any(start <= index <= end for start, end in indices) for index, item in enumerate(my_list, start=1)]
...
>>> my_list = [False, False, False, False, False, False, False, False, False, False]
>>> solve(ranges, my_list)
[False, True, True, True, False, True, True, False, False, False]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/353122.html
