簡體   English   中英

如何在python中對字符串列表和相關數字列表進行排序?

[英]How to sort through a list of strings and a list of numbers which are related, in python?

我正在創建一個學生評分程序:它在輸入模式下啟動,並要求提供姓名,年齡,科學等級,數學等級和英語等級。
然后,有多種可能的操作:添加學生,添加學校班級,打印每個添加的學生,以及-打印不同學科中從低到高的成績。 這是我遇到的最后一個動作。

我失敗的是,當用戶在主菜單中輸入“ 4”時,詢問用戶是否要顯示學生的數學,物理或英語成績。 當用戶指定要顯示的內容時,將生成類似以下內容的內容:

Jill: 3
Marvin: 4
Jack: 6
Raf: 80

我知道如何使用sort()函數對數字進行排序,但是如何使“吉爾”與列表中的“ 3”排在同一位置。

因此,我可以執行以下操作:

for p in range(len(allStudents)):
    print(allStudents[p].printName(), ":" ,  mathsAll[p] , "/100")

我知道我可以為此使用一個字典,但是假設我輸入了2個名為“ Jill”的用戶,那么它將覆蓋第一個用戶。

完整的代碼可以從以下網址找到: http : //pastebin.com/R2uGAQVg任何幫助將不勝感激!

您需要將名稱與值配對。 如果由於某種原因不想使用字典,請使用元組。

data = [('Jill', 3), ('Marvin', 4), ('Jack', 6), ('Raf', 80)]

for datum in data:
    name, score = data
    # do whatever you like....

或使用詞典列表

data = [{'name': 'Jill', 'score': '3'}, ... ]

for d in data:
    print(d['name'] + ": " + d['score'])

或使用namedtuple

from collections import namedtuple

Student = namedtuple('Student', ['name', 'score'])

data = [Student(name="Jill", score=3), ... ]

for student in data:
    print(data.name + ": " + data.score)
    # or print("{student.name}: {student.score}".format(student=student))

或其他比兩個不相關的列表更好的數據處理方式!!

您可以將學生存儲在課程中:

class Student:
   def __init__(self, name, math_grade):
       self.name = name
       self.math_grade = math_grade

然后,如果您有一個學生列表student_list ,則可以按屬性對列表進行排序:

student_list = [Student("Steve", 3), Student("Paul", 4), Student("Jack, 5")]
student_list.sort(key=lambda x: x.math_grade, reverse=True)
print(student_list)

然后,如果學生具有更多屬性(年齡,姓名,科學等級,英語等級等),則可以通過更改lambda輕松對它們進行排序。

如果您的應用程序將在兩次運行之間保存有關學生的信息,則應考慮使用其他類型的容器,例如嵌入式數據庫(例如SQL light)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM