如何对列表列表进行插入排序?
How do I insertion sort a list of lists?
def insertionSort(mylist):
for index in range(1, len(mylist)):
currentvalue = mylist[index]
position = index
while position > 0 and mylist[position - 1] > currentvalue:
mylist[position] = mylist[position - 1]
position = position - 1
mylist[position] = currentvalue
return mylist
上面我有一些代码可以对列表的列表进行插入排序,例如
list1 = [(12,45,62),(78,35,72),(34,52,75)]
insertionSort(list1)
产量
list1 = [(12,45,62),(34,52,75),(78,35,72)]
它按第一个元素(12、34 和 78)对每个子列表进行排序。如何让插入排序按子列表的第二个和第三个元素排序?
Python 库中的排序函数为此提供了一个 key
参数,用于确定用于获取比较两个元素的键的函数。您可以为自己的插入排序做同样的事情。此参数的默认值可以是一个返回元素本身的函数,但它可以被任何其他关键函数覆盖。
def insertionSort(mylist, key=lambda x: x):
for index in range(1, len(mylist)):
currentvalue = mylist[index]
position = index
while position > 0 and key(mylist[position - 1]) > key(currentvalue):
mylist[position] = mylist[position - 1]
position = position - 1
mylist[position] = currentvalue
return mylist
示例:
>>> list1 = [(12,45,62),(78,35,72),(34,52,75)]
>>> insertionSort(list1)
[(12, 45, 62), (34, 52, 75), (78, 35, 72)]
>>> insertionSort(list1, key=lambda x: x[1])
[(78, 35, 72), (12, 45, 62), (34, 52, 75)]
注意:在sort
和sorted
中,key
函数只会对列表中的每个值计算一次,而在这个版本中,它会在每次比较时计算.如果你只想调用一次函数,你可以,例如,将键值缓存在字典中。
def insertionSort(mylist):
for index in range(1, len(mylist)):
currentvalue = mylist[index]
position = index
while position > 0 and mylist[position - 1] > currentvalue:
mylist[position] = mylist[position - 1]
position = position - 1
mylist[position] = currentvalue
return mylist
上面我有一些代码可以对列表的列表进行插入排序,例如
list1 = [(12,45,62),(78,35,72),(34,52,75)]
insertionSort(list1)
产量
list1 = [(12,45,62),(34,52,75),(78,35,72)]
它按第一个元素(12、34 和 78)对每个子列表进行排序。如何让插入排序按子列表的第二个和第三个元素排序?
Python 库中的排序函数为此提供了一个 key
参数,用于确定用于获取比较两个元素的键的函数。您可以为自己的插入排序做同样的事情。此参数的默认值可以是一个返回元素本身的函数,但它可以被任何其他关键函数覆盖。
def insertionSort(mylist, key=lambda x: x):
for index in range(1, len(mylist)):
currentvalue = mylist[index]
position = index
while position > 0 and key(mylist[position - 1]) > key(currentvalue):
mylist[position] = mylist[position - 1]
position = position - 1
mylist[position] = currentvalue
return mylist
示例:
>>> list1 = [(12,45,62),(78,35,72),(34,52,75)]
>>> insertionSort(list1)
[(12, 45, 62), (34, 52, 75), (78, 35, 72)]
>>> insertionSort(list1, key=lambda x: x[1])
[(78, 35, 72), (12, 45, 62), (34, 52, 75)]
注意:在sort
和sorted
中,key
函数只会对列表中的每个值计算一次,而在这个版本中,它会在每次比较时计算.如果你只想调用一次函数,你可以,例如,将键值缓存在字典中。