2016-12-16 79 views
-1

嘗試對列表進行迭代並刪除每個子列表中的最小值。當我使用min()BIF時,它會產生TypeError,因爲我正在比較字符串值和整數值。我如何避免這種比較,並找到子列表中的最小值?在包含整數和字符串的子列表中查找最小值

studentList = [['A', 2, 5, 7], ['B', 6, 2, 9], ['C', 5, 3, 9]] 
for student in studentList: 
    student.remove(min(student)) 
print(studentList) 
+0

如果同時存在字符串和數字,您如何定義最小值?列表中的字符串是否顯示標籤?如果是這種情況,你可能要考慮使用'dict' –

+1

你認爲最小值是多少?你只想排除第一個元素(即'min(student [1:])')? – jonrsharpe

+0

'A'大於還是小於2? – OdraEncoded

回答

0

可以說學生的名字縮寫爲「A」,以及隨後的 整數標誌,我想刪除的最低點(整數)

在你的情況,你應該跳過在每個子列表中的第一個項目,然後 - 得到剩餘序列中的最小值:

studentList = [['A', 2, 5, 7], ['B', 6, 2, 9], ['C', 5, 3, 9]] 
for student in studentList: 
    student.remove(min(student[1:])) 

print(studentList) 

輸出:

[['A', 5, 7], ['B', 6, 9], ['C', 5, 9]] 
0

如果子列表中的第一個值代表一個標籤,那麼您的數據將更有意義將其存儲爲dict,這樣您就不必在處理時忽略該標籤進行額外處理數字:

studentList = [['A', 2, 5, 7], ['B', 6, 2, 9], ['C', 5, 3, 9]] 
#use the first value in the list as the 'key' and use the rest of the values as the 'value' 
studentMarks = {student[0]:student[1:] for student in studentList} 

for marks in studentMarks.values(): 
    marks.remove(min(marks)) 

>>> studentMarks 
{'B': [6, 9], 'C': [5, 9], 'A': [5, 7]} 

此數據結構可能更有用,因爲現在studentMarks['A']會給你的學生A標記,studentMarks.keys()會給你所有學生的姓名和studentMarks.values()所有標記列表清單列表。

相關問題