我有一个名为data
的2D列表
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
和2个随机数n1
和n2
(不限于2个数字)。当我运行我的程序时,n1和n2将被随机设置在[0-3]之间,因为数据在[0-3]之间有4列索引。然后根据n1和n2所指向的列对数据进行排序。
假设
n1
= 2n2
= 3
因此,列表现在应该首先按第二列排序,如果第二列中的值相同,则应该根据第三列进行排序,依此类推,如下面的
所示[['ABC', 12, 3, 100],
['GHI', 13, 3, 1000],
['DEF', 10, 5, 200]]
我期待着你的帮助。提前感谢
使用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]]
这将适用于任何数量的索引。
您可以将元组传递给排序键:
sorted(data, key=lambda x: (x[n1],x[n2]))
你可以利用列表的.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元组,然后在排序过程中用作值
使用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]]