2016-12-16 2 views
-1

Пытается перебирать список списков и удалять наименьшее значение в каждом подсписке. Когда я использую min() BIF, он дает TypeError, поскольку я сравниваю значения string и integer. Как избежать этого сравнения и найти минимальное значение в подсписке?Поиск минимального значения в подсписке, содержащем целые числа и строки

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

позволяет сказать, что имя студентов сокращается до «А», а последующие целые марки, я хочу, чтобы удалить самую низкую отметку (целое)

В вашем случае, вы должен пропустить первый элемент в каждом подсписке, затем - получить минимум от оставшейся последовательности:

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() перечень всех списков знаков.

Смежные вопросы