我试图在元组列表上实现选择排序

时间:2016-11-26 04:58:14

标签: python list sorting tuples

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

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)

但我得到一个错误说&#34;最小= i [1] TypeError:&#39; int&#39;对象不是可订阅的&#39;

我不知道如何做到这一点,或者我如何改变它以使其发挥作用。

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

1 个答案:

答案 0 :(得分:4)

使用原始列表

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

您可以使用python builtin 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)