按列表中的索引排序元组

时间:2017-11-08 16:41:26

标签: python algorithm list sorting

所以我一直在尝试实现一个sort函数,它按列表中元组的索引对元组列表进行排序,我希望函数做的就是完全按照以下方式工作:

def sort(list):
    for item in list:
        list.sort(key=lambda tuple: tuple[1])
    return list

返回

[('asdasd', 1), ('test', 2), ('34', 3), ('testtt', 5), ('ahj', 12)]

listtest = [("test",2),("testtt",5),("ahj",12),("asdasd",1),("34",3)]

被召唤。

我之所以不使用这个,是因为我正在努力学习如何将算法实现到编程语言中,因为我来自数学背景。

我制作的算法如下所示(示例显示的列表只包含元素,而不是元组)

def my_sort(list):
    for i in range(len(list)):
        j = i-1
        key = list[i]
        while (list[j] > key) and (j >= 0):
            list[j+1] = list[j]
            j -= 1
        list[j+1] = key
    return list

它按索引对元素进行排序。现在,对于我想按索引对元组进行排序的部分,到目前为止我所拥有的是:

def sort_tuples(list):
    for i in range(len(list)):
        j = i - 1
        key = list[i][1] #returns the index of tuple i
        while (list[j][1] > key) and (j >= 0): #compares the 2nd tuples index with the first tuples index
            list[j+1] = list[j]
            j -= 1 
        key = list[j+1][1] # <----- problem?
    return list

运行时返回

[('test', 2), ('test', 2), ('testtt', 5), ('testtt', 5), ('ahj', 12)]

2 个答案:

答案 0 :(得分:0)

您必须保留list[i]才能将其重新插入第j个索引:

def sort_tuples(list):
    for i in range(len(list)):
        j = i - 1
        list_i = list[i]
        key = list[i][1] 
        while (list[j][1] > key) and (j >= 0):
            list[j+1] = list[j]
            j -= 1
        list[j+1] = list_i
    return list

print sort_tuples([("test",2),("testtt",5),("ahj",12),("asdasd",1),("34",3)])

答案 1 :(得分:0)

Python的禅宗说:如果某些代码易于阅读和工作,请不要改变它(这是件好事。这很好。)。

def mysort(myiter):
    result = []
    for i in myiter:
        result[i[1]] = i[0]
    return tuple(result)

是最具可读性和优雅的代码段。