对于作业,我必须创建自己的排序算法来对包含足球比分的列表进行排序。
信息的格式如下(有多个这样的子列表):
['Netherlands', 7, 6, 0, 1, 12, 6, 6, 18]
首先应根据索引8进行排序,然后如果索引8的数字相同,则应根据索引7进行排序,等等
我已经设法根据索引8对其进行排序,但之后却陷入困境。所以我在这里使用选择排序:
def Sorting(List, sortVar):
for index in range(len(List)):
cur_pos = stats[index][sortVar]
high = List[index]
loc = index
for i in range(index,len(List)):
if stats[i][sortVar] > cur_pos:
cur_pos = List[i][sortVar]
high = List[i]
loc = i
temp = List[index]
List[index] = high
List[loc] = temp
print("")
print(List)
return List
然后在此之后我尝试了一些东西但却陷入困境。可能是一个非常简单的问题,但我真的很挣扎。谢谢!
编辑:我看过一些帖子解释了这一点,但我不理解它们,它们都使用了内置的排序功能,我不允许这样做...
答案 0 :(得分:2)
def bubble_sort(items):
""" Implementation of bubble sort """
for i in range(len(items)):
for j in range(len(items) - 1 - i):
if items[j] > items[j + 1]:
items[j], items[j + 1] = items[j + 1], items[j] # Swap!
这是一个经过修改的冒泡排序。它只是在比较它们之前反转两个项目。两个比较元素必须理解[::-1]
:
def modified_bubble_sort(items):
for i in range(len(items)):
for j in range(len(items) - 1 - i):
# Reverse the lists before comparing them
if items[j][::-1] > items[j + 1][::-1]:
items[j], items[j + 1] = items[j + 1], items[j] # Swap!
效率不高,因为冒泡排序为O(n ** 2),修改后的版本继续反转相同的列表,但它非常简洁明了。
这是一个测试:
scores = [
['Netherlands', 7, 6, 0, 1, 12, 6, 6, 19],
['Netherlands', 7, 6, 0, 1, 12, 6, 6, 19],
['Netherlands', 7, 6, 0, 1, 12, 6, 7, 18],
['Netherlands', 7, 6, 0, 1, 12, 6, 6, 18],
['Spain', 7, 6, 0, 1, 12, 6, 7, 18]
]
modified_bubble_sort(scores)
print(scores)
请注意,它修改了原始列表。它输出:
[['Netherlands', 7, 6, 0, 1, 12, 6, 6, 18], ['Netherlands', 7, 6, 0, 1, 12, 6, 7, 18], ['Spain', 7, 6, 0, 1, 12, 6, 7, 18], ['Netherlands', 7, 6, 0, 1, 12, 6, 6, 19], ['Netherlands', 7, 6, 0, 1, 12, 6, 6, 19]]
与以下结果相同:
print(sorted(scores, key=lambda l: l[::-1]))
答案 1 :(得分:0)
我想说最简单的方法(如果允许使用内置函数)是反转每个子列表,按字母顺序排序,然后重新反转每个子列表。
def my_sort(l):
# Reverse so you can sort numerically-lexicographically
reversed_lists = [x[::-1] for x in l]
# Sort "normally" (i.e., numerically-lexicographically)
reversed_lists.sort()
# Re-reverse each sublist so they fit your expected return format
return [x[::-1] for x in reversed_lists]
在行动here中查看。
如果您不允许使用内置插件,则需要自行设计排序位,但逻辑仍然相同。
您也可以使用key
kwarg对反向子列表进行排序:
def my_sort(l):
return list(sorted(l, key=lambda subl: subl[::-1]))