所以我一直在尝试实现一个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)]
答案 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)
是最具可读性和优雅的代码段。