【问题标题】:I'm trying to implement a selection sort on a list of tuples我正在尝试在元组列表上实现选择排序
【发布时间】:2016-11-26 04:58:14
【问题描述】:

该列表包含许多元组,元组的第一个元素是名称,第二个元素是评级。

Tuple = [('Bob', 123),('Sky', 234),('Sara', 156)]    
for i in range(0, len(Tuple)-1):

    smallest = i

    for j in range(i+1, len(Tuple)):

        if Tuple[j] < Tuple[smallest]:

                    smallest = j

    if smallest !=i:

        Tuple[i], Tuple[smallest] = Tuple[smallest] , Tuple[i]
print(Tuple)

这将按字母顺序对列表进行排序,但我希望它按评级从高到低排序。

我试过这个:

for i in range(0, len(Tuple)-1):

    smallest = i[1]

    for j in range(i+1, len(Tuple)):

        if Tuple[j[1]] < Tuple[smallest]:

                    smallest = j

    if smallest !=i:

        Tuple[i], Tuple[smallest] = Tuple[smallest] , Tuple[i]
print(Tuple)

但我收到一条错误消息“smallest = i[1] TypeError: 'int' object is not subscriptable”

我不知道该怎么做,也不知道如何更改它以使其正常工作。

注意:我需要自己编写代码,不要使用任何内置函数。

【问题讨论】:

  • 你需要自己写一个排序函数,还是仅仅对一个元组进行排序?你可以使用sorted(Tuple, key=lambda x: x[1], reverse=True)
  • 我需要自己写
  • @BrendanLevine 我更改了答案以包含一个没有内置插件的解决方案
  • @Signal 非常感谢它的工作,这是我在编程课介绍中的期末考试的一部分。

标签: python list sorting tuples


【解决方案1】:

使用您的原始列表,

names_ratings = [("Bob", 123), ("Sky", 234), ("Sara", 156)]   

您可以使用python内置sorted

names_ratings_sorted = sorted(names_ratings, key=lambda tup: tup[1])

print(names_ratings_sorted)

输出:

[("Bob", 123), ("Sara", 156), ("Sky", 234)]   

没有内置函数:

使用相同的原始列表,

names_ratings = [("Bob", 123), ("Sky", 234), ("Sara", 156)] 

这无需使用任何内置插件即可工作。

names_ratings_sorted = []

while names_ratings:

    maximum = names_ratings[0]

    for name, rating in names_ratings:

        if rating > maximum[1]:

            maximum = (name, rating)

    name_ratings_sorted.append(maximum)
    names_ratings.remove(maximum)

【讨论】:

    猜你喜欢
    • 2013-04-02
    • 2021-04-05
    • 2016-08-31
    • 2018-10-13
    • 2023-01-09
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 2020-10-24
    相关资源
    最近更新 更多