【问题标题】:How do I insertion sort a list of lists?如何插入排序列表列表?
【发布时间】:2016-04-26 11:31:21
【问题描述】:
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)对每个子列表进行排序。如何使插入排序按子列表的第二个和第三个元素排序?

【问题讨论】:

  • 你坚持使用插入排序有什么原因吗?
  • @AnthonyLabarre 在这种情况下重要吗?

标签: python algorithm sorting python-3.x insertion-sort


【解决方案1】:

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)]

注意:在sortsorted 中,key 函数将只对列表中的每个值进行一次评估,而在此版本中,它会针对每次比较进行评估。如果您只想调用该函数一次,您可以,例如,将键值缓存在字典中。

【讨论】:

  • 太棒了。感谢您的回答
猜你喜欢
  • 2018-04-02
  • 2021-05-02
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
相关资源
最近更新 更多