python - 如果在使用 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
解决方案
您可以遍历偶数索引处的值,并在下一个索引与名称匹配时输出该值:
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']
推荐阅读
- docker - Docker compose 抛出 - adduser: group 'www-data' in use
- java - 即使文件存在于机器中,也无法使用 Android 访问本地机器上的文件
- powerbi - 对列的 MAX 值求和
- facebook - 在网站上嵌入数十条来自 Facebook iframe 的评论
- arrays - 如何过滤掉 Gerrit JSON api 响应的前几个坏字符
- ios - 用于 UIContextMenuConfiguration 的 iOS 13.0 UIMenu 和 UIAction
- java - 如何在我的布局中滚动时查看所有图像
- html - 如何向上移动导航栏,以便顶部栏之间没有太多空间?
- c - GDB 一直在第 7 行设置断点,而不是我指定的行
- java - Spring Security 通过注册用户注册另一个用户