如何插入列表列表?

时间:2016-04-26 11:31:21

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

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)对每个子列表进行排序。如何通过子列表的第二个和第三个元素进行插入排序?

1 个答案:

答案 0 :(得分:2)

Python库中的排序函数为此提供了一个this参数,确定了用于获取比较两个元素的键的函数。您可以对自己的插入排序执行相同的操作。此参数的默认值可以是返回元素本身的函数,但可以使用任何其他键函数覆盖它。

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函数。如果你想只调用一次该函数,你可以,例如,将键值缓存在字典中。