首页 > 解决方案 > 如果在使用 lambda、map 和 list 时 Boolean 为 True,如何返回以下位置的列表?

问题描述

我有一个名字列表,每个名字后面都有一个数字。像这样

l = ["Bob", 4, "Rob", 5, "Sam", 6, "Bob", 5]

我想返回一个与给定名称相对应的数字列表,仅使用 lambda、map、list 或 filter。

例如,如果我将名字 Bob 与 一起使用list = ["Bob",4,"Rob",5,"Sam",6,"Bob",5],我的输出将是

[4,5]

我想我了解 lambda 的大部分内容,我只是无法让它返回我想要的东西。

mx = list(map(lambda x: l[x+1] if x == name, l))

我收到此错误。 Syntax Error: invalid syntax: <string>, line 14, pos 29

标签: pythonpython-3.xlambda

解决方案


您可以遍历偶数索引处的值,并在下一个索引与名称匹配时输出该值:

result = [l[i+1] for i in range(0,len(l),2) if l[i] == "Bob"]

如果您被允许使用枚举,这可以更简洁一些(假设奇数索引都不包含匹配的字符串):

result = [l[i+1] for i,n in enumerate(l) if n == 'Bob' ]

或使用 zip()

result = [v for n,v in zip(l,l[1:]) if n == 'Bob']

推荐阅读