【发布时间】:2019-06-11 16:53:22
【问题描述】:
我有一个名字列表,每个名字后面都有一个数字。像这样
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
【问题讨论】:
-
l[x+1] if x == name不是语法上有效的表达式。lambda函数只接受表达式。无论如何,map在这里似乎并不合适,至少不在该列表中,因为您提供的任何功能map都将应用于每个元素。您可能希望首先将列表的元素成对分组,然后映射一个适用于这些对的函数... -
另外,想想如果这确实有效会发生什么:
l[x+1] if x == name所以如果x == 'Bob',那么你将使用l["Bob" + 1]索引到l,这不会感觉。 -
您最初从哪里获得该列表?如果每个名称都与下面的数字相关联,那么像
[("Bob", 4), ("Rob", 5), ...]这样更明确的东西会更自然。 (也很容易获得:zip(l[0::2], l[1::2])。)
标签: python python-3.x lambda