2016-12-16 82 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()所有标记列表清单列表。

相关问题