想請問大家有沒有辦法讓兩個串列能互相呼應?
想要做出照分數排列由高到低,但只會做分數的,不清楚字串要如何跟著一起排列
list0=["1號 ","2號 ","3號 ","4號 ","5號 "]
list1= [90,88,92,60,70]
print("依照分數排列結果 :")
list1new=sorted(list1,reverse=True)
for j in range(0,5):
print(list0[j],str(list1new[j])+"分")
要呈現的樣子:
3號 92分
1號 90分
2號 88分
5號 70分
4號 60分
list0 = ["1號 ","2號 ","3號 ","4號 ","5號 "]
list1 = [90,88,92,60,70]
print("依照分數排列結果 :")
list1new = sorted(range(len(list1)), key=lambda k: list1[k], reverse=True)
for j in range(0,5):
print(list0[list1new[j]], str(list1[list1new[j]])+"分")
依照分數排列結果 :
3號 92分
1號 90分
2號 88分
5號 70分
4號 60分
我會用字典儲存資料,然後再去做排序
student = {
"1號": 90,
"2號": 88,
"3號": 92,
"4號": 60,
"5號": 70
}
# dict.items() 轉成tuple
sort_by_grade = sorted(student.items(), key=lambda item: item[1], reverse=True)
print(sort_by_grade)
輸出結果:
[('3號', 92), ('1號', 90), ('2號', 88), ('5號', 70), ('4號', 60)]
#!/usr/local/bin/python3
list0=["1號 ","2號 ","3號 ","4號 ","5號 "]
list1= [90,88,92,60,70]
list2 = list(zip(list0, list1))
list2.sort(key = lambda x: x[1], reverse=True)
print("\n".join(f"{elem[0]} {elem[1]} 分" for elem in list2))
可以
用「自己排序法」
# -*- coding: UTF-8 -*-
list0=["1號 ","2號 ","3號 ","4號 ","5號 "]
list1= [90,88,92,60,70]
print("依照分數排列結果 :")
for i in range(len(list1)):
for j in range(i + 1, len(list1)):
if list1[i] < list1[j]:
list1[i], list1[j] = list1[j], list1[i]
list0[i], list0[j] = list0[j], list0[i]
for j in range(0,5):
print(list0[j],str(list1[j])+"分")
list0 = ["1號 ","2號 ","3號 ","4號 ","5號 "]
list1 = [90,88,92,60,70]
list2 = list(zip(list0, list1))
print("依照分數排列結果 :")
for name, score in sorted(list2, reverse=True, key=lambda k: k[1]):
print("%s: %d分" % (name, score))
首先要有個觀念,名字與成績應該是同一筆資料,不該存放在不同的 list 內,這種做法很不 Pythonic,所以用 zip
把兩個 list 的資料給合併成一組 list of tuple
>>> list2 = list(zip(list0, list1))
>>> list2
[('1號 ', 90), ('2號 ', 88), ('3號 ', 92), ('4號 ', 60), ('5號 ', 70)]
接下來要排序的時候,可以使用 sorted
的 key
參數,來指定要以什麼東西作為排序的依據,最後 for 迴圈使用 python 的語法直接拿出 list 內的每個 value
參考資料:
https://docs.python.org/3/library/functions.html#sorted
https://docs.python.org/3/tutorial/controlflow.html#lambda-expressions
https://docs.python.org/3/tutorial/controlflow.html#for-statements