我在一本书中看到如何将特定的排序函数传递给 Python 自己的内置 sorted() 函数,如下所示:
def mysort(a, b):
if a[3] < b[3]:
return -1
elif a[3] > b[3]:
return 1
else:
return 0
data = [
('Alpha Centauri A', 4.3, 0.26, 1.56),
('Alpha Centauri B', 4.3, 0.077, 0.45),
('Alpha Centauri C', 4.2, 0.00001, 0.00006),
("Barnard's Star", 6.0, 0.00004, 0.0005),
('Wolf 359', 7.7, 0.000001, 0.00002),
('BD +36 degrees 2147', 8.2, 0.0003, 0.006),
('Luyten 726-8 A', 8.4, 0.000003, 0.00006),
('Luyten 726-8 B', 8.4, 0.000002, 0.00004),
('Sirius A', 8.6, 1.00, 23.6),
('Sirius B', 8.6, 0.001, 0.003),
('Ross 154', 9.4, 0.00002, 0.0005),
]
sorted_data = sorted(data, mysort)
上面的代码根据 4 元素元组的第 4 个元素对数据进行排序。在这里,我试图弄清楚 sorted() 函数如何将a
和b
参数提供给mysort
函数。我的意图是将另一个参数传递给mysort
函数,类似于:
def mysort(a, b, i):
if a[i] < b[i]:
return -1
elif a[i] > b[i]:
return 1
else:
return 0
它将告诉函数排序应该基于哪个元素。我很困惑,因为在行
sorted_data = sorted(data, mysort)
我们不向mysort
函数传递任何参数。该sorted()
函数似乎在发挥自己的魔力,并为函数提供a
和b
参数mysort
。总而言之,我想知道是否有办法为mysort
函数添加第三个参数以用于不同的排序类型?
谢谢!