我有一個名為的 2D 串列 data
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
和2個亂數n1和n2(不限于2個數字)。每當我運行我的程式時,n1 和 n2 將隨機設定在 [0-3] 之間,因為資料有 4 列索引在 [0-3] 之間。之后,應根據 n1 和 n2 指向的列對資料進行排序。
讓我們說
n1= 2
n2= 3
因此,串列現在應該首先按第二列排序,如果第二列中的值相同,則應根據第三列進行排序,依此類推,如下所示
[['ABC', 12, 3, 100],
['GHI', 13, 3, 1000],
['DEF', 10, 5, 200]]
我期待著您的幫助。提前致謝
uj5u.com熱心網友回復:
用 operator.itemgetter
from operator import itemgetter
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
indices = [2, 3]
res = sorted(data, key=itemgetter(*indices))
print(res)
輸出
[['ABC', 12, 3, 100], ['GHI', 13, 3, 1000], ['DEF', 10, 5, 200]]
這適用于任意數量的索引。
uj5u.com熱心網友回復:
您可以將元組傳遞給排序鍵:
sorted(data, key=lambda x: (x[n1],x[n2]))
uj5u.com熱心網友回復:
您可能會利用.sort接受功能key并在適當位置作業的串列方法,即
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
data.sort(key=lambda x:(x[2],x[3]))
print(data)
輸出
[['ABC', 12, 3, 100], ['GHI', 13, 3, 1000], ['DEF', 10, 5, 200]]
lambda 用于創建 2 元組,然后在排序期間用作值
uj5u.com熱心網友回復:
使用operator.itemgetter您的排序鍵功能:
from operator import itemgetter
indices = [2, 3]
data.sort(key=itemgetter(*indices))
# [['ABC', 12, 3, 100],
# ['GHI', 13, 3, 1000],
# ['DEF', 10, 5, 200]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/336675.html
下一篇:初始化指標和矩陣陣列
