对整数列表进行排序,以它们按升序除以 5 时留下的余数为基础?



即除以 5 时留下较低余数的数字应该在留下较高余数的数字之前。

如果两个整数留下相同的余数,则它们的顺序(如在原始列表中(应保留。 输入: [1, 9, 35, 12, 13, 21, 10] 输出: [35, 10, 1, 21, 12, 13, 9]

Python 的 sort(( 有可选的参数键。您可以使用 lambda 函数作为键,如下所示:

numbers = [1, 9, 35, 12, 13, 21, 10]
numbers.sort(key=lambda i: i % 5)
print(numbers)

快速解释一下这里发生的事情: lambda 函数是内联定义的函数,未命名。lambda i: i % 5

def modulo_5(i):
return i % 5

key 参数告诉 sort(( 方法使用列表项以外的其他内容来确定排序顺序。我们定义为排序键的函数将列表项作为其参数(我们称之为参数 i(。然后,它获取列表项并应用取模运算符,该运算符返回将该项除以我们指定的数字(在本例中为 5(的余数。然后,它根据此余数值进行排序。当多个列表项具有相同的排序键值时,它们将按照与原始列表中相同的顺序保存。这就是为什么 35 在排序列表中排在 10 之前,因为 35 在原始列表中早于 10。

  • 您可以使用排序函数的键参数。它接受您希望如何对值进行排序的 lambda。在此处阅读更多内容。https://docs.python.org/3/howto/sorting.html。
  • 如果两个整数留下相同的余数,则它们的顺序。Python 排序是稳定的,因此默认情况下将保持您的订单。
l = [1, 9, 35, 12, 13, 21, 10]
sorted(l, key = lambda x:x%5)

[35, 10, 1, 21, 12, 13, 9]

最新更新