我有一个嵌套列表,如下所示:
students = [['Jagan', 65.5], ['Kiran', 55.45], ['Maddy', 47.2], ['Harsha', 75.0], ['Pavy', 55.45]]
我试图找出第二低的分数,我使用下面的函数首先找出第二低的数字
def second_lowest(l):
small, second_small = float('inf'), float('inf')
for number in l:
if number[1] <= small:
small, second_small = number[1], small
elif number[1] < second_small:
second_small = number[1]
return second_small
在这之后,我使用下面的lambda函数过滤掉第二个得分最低的人的名字
sl = second_lowest(students)
names = filter(lambda x: x[0] if (x[1] == sl) else None, students)
print names
我希望输出应该只有名称,因为我在公式中使用x[0],但我得到的是整个列表,如下所示:
[['Kiran', 55.45], ['Pavy', 55.45]]
filter()函数的工作原理有点不同,它应该为每个项返回True或False,并且输出中只有一个True,因此您必须这样做:
为了只得到名字,你应该在上面加一个lambda
或者只使用一个map()而不是filter(),但是在这种情况下,您将得到一个列表,其中没有一个
相关问题 更多 >
编程相关推荐