我尝试使用过滤函数与嵌套列表,但我无法通过使用过滤函数来存储内部列表的第0个元素。

2024-10-02 10:18:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个嵌套列表,如下所示:

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]]

Tags: lambda函数number列表ifnamesfloatinf
1条回答
网友
1楼 · 发布于 2024-10-02 10:18:58

filter()函数的工作原理有点不同,它应该为每个项返回True或False,并且输出中只有一个True,因此您必须这样做:

names = filter(lambda x: x[1] == sl, students)

为了只得到名字,你应该在上面加一个lambda

names = map(labmda x: x[0], filter(lambda x: x[1] == sl, students))

或者只使用一个map()而不是filter(),但是在这种情况下,您将得到一个列表,其中没有一个

names = map(lambda x: x[0] if (x[1] == sl) else None, students)

相关问题 更多 >

    热门问题