我有一個類似的串列:
A=[(0, 16), (1, 11), (2, 4), (3, 14), (4, 8), (5, 15), (6, 13), (7, 2), (8, 20), (9, 17), (10, 5), (11, 12), (12, 6), (13, 7), (14, 0), (15, 1), (16, 19), (17, 18), (18, 10), (19, 9), (20, 3)]
這是一條汽車的路線。例如,這輛車從 0 到 16(0,16) 離開,然后從 16 到 19(16,19),然后從 19 到 9 等等。對于大型資料集,很難遵循這條路線。我嘗試撰寫回圈但無法成功。我必須將此 A 串列轉換為另一個串列,例如
B=[0,16,19,9,17,18,10,5,15,1,11,12,6,13,7,2,4,8,20,3,14,0]
uj5u.com熱心網友回復:
如果您將您list A的轉換為dict離子型,則查找速度要快得多:
A_dict = dict(A)
start = 0
route = [start]
frm = start
while True:
to = A_dict[frm]
route.append(to)
frm = to
if to == start:
break
print(route)
對于你的給定A,你得到route
[0, 16, 19, 9, 17, 18, 10, 5, 15, 1, 11, 12, 6, 13, 7, 2, 4, 8, 20, 3, 14, 0]
圖的邊緣存盤A_dict為
{0: 16, 1: 11, 2: 4, 3: 14, 4: 8, 5: 15, 6: 13, 7: 2, 8: 20, 9: 17, 10: 5, ...}
如果您在串列中執行下一跳的查找,則A您的方法的整體性能將是二次的(在串列的長度中A)。使用字典的方法在 的長度上線性增長A。
稍短的版本:
start = 0
route = [start]
while True:
route.append(to := A_dict[route[-1]])
if to == start:
break
uj5u.com熱心網友回復:
看起來您想要展平串列(將“元組串列”轉換為平面串列或矩陣):
flattened = [item for sublist in l for item in sublist]
uj5u.com熱心網友回復:
您可以通過兩個步驟獲得所需的串列:
(i) 轉換A為字典。這樣我們就可以A像汽車一樣穿越
dict_A = dict(A)
(ii) 現在遍歷dict_Awhere 每次到達一個元組時,out根據 將第一個元素添加到并前往下一個目的地dict_A。你這樣做,直到你回到開始out。
out = [A[0][0]]
while True:
out.append(dict_A[out[-1]])
if out[-1] == out[0]:
break
輸出:
[0, 16, 19, 9, 17, 18, 10, 5, 15, 1, 11, 12, 6, 13, 7, 2, 4, 8, 20, 3, 14, 0]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/410878.html
標籤:
上一篇:未處理的例外:型別'_InternalLinkedHashMap<String,dynamic>'不是型別'HashMap<String,dynamic
