查找包含整数和字符串的子列表中的最小值

时间:2016-12-16 20:20:05

标签: python-3.x

尝试迭代列表列表并删除每个子列表中的最低值。当我使用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)

2 个答案:

答案 0 :(得分: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]]

答案 1 :(得分: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()的列表所有标记列表的列表。