我想用串列的元素創建一個新串列,但根據另一個串列的值進行排序。
例子:
list = [12, 17, 26, 28, 29, 33, 34, 37, 41, 43, 45, 64, 70]
index_list = [9, 10, 0, 1, 2, 6, 8, 7, 3, 5, 4, 11, 12]
結果應該是:
final_list = [26, 28, 29, 41, 45, 43, 33, 37, 34, 12, 17, 64, 70]
我嘗試使用插入方法來做到這一點:
final_list = []
for i in range(len(list)):
final_list.insert(index_list[i], list[i])
print(final_list)
但輸出不正確:
[26, 28, 29, 41, 45, 12, 43, 17, 33, 34, 37, 64, 70]
uj5u.com熱心網友回復:
真的沒有必要對任何東西進行排序:
alist = [12, 17, 26, 28, 29, 33, 34, 37, 41, 43, 45, 64, 70]
index_list = [9, 10, 0, 1, 2, 6, 8, 7, 3, 5, 4, 11, 12]
res = [0] * len(index_list)
for i, j in enumerate(index_list):
res[j] = alist[i]
print(res)
印刷
[26, 28, 29, 41, 45, 43, 33, 37, 34, 12, 17, 64, 70]
uj5u.com熱心網友回復:
zip將兩個串列放在一起(索引作為每個元組的第一部分)并對結果進行排序:
>>> a_list = [12, 17, 26, 28, 29, 33, 34, 37, 41, 43, 45, 64, 70]
>>> index_list = [9, 10, 0, 1, 2, 6, 8, 7, 3, 5, 4, 11, 12]
>>> sorted(zip(index_list, a_list))
[(0, 26), (1, 28), (2, 29), (3, 41), (4, 45), (5, 43), (6, 33), (7, 37), (8, 34), (9, 12), (10, 17), (11, 64), (12, 70)]
然后只需拉出與原始對應的元素a_list:
>>> [i[1] for i in sorted(zip(index_list, a_list))]
[26, 28, 29, 41, 45, 43, 33, 37, 34, 12, 17, 64, 70]
uj5u.com熱心網友回復:
類似于安東尼的,但更直接(不需要額外的索引enumerate):
alist = [12, 17, 26, 28, 29, 33, 34, 37, 41, 43, 45, 64, 70]
index_list = [9, 10, 0, 1, 2, 6, 8, 7, 3, 5, 4, 11, 12]
res = [None] * len(alist)
for i, res[i] in zip(index_list, alist):
pass
print(res)
輸出(在線嘗試!):
[26, 28, 29, 41, 45, 43, 33, 37, 34, 12, 17, 64, 70]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/471924.html
下一篇:Maxifs的陣列公式
