该列表包含许多元组,元组的第一个元素是名称,第二个元素是评级。
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;
我不知道如何做到这一点,或者我如何改变它以使其发挥作用。
注意:我需要自己编写代码而不使用任何内置函数。
答案 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)