我想使用map获取字符串列表:
value = '1, 2, 3'
my_list = list(map(strip, value.split(',')))
但是收到了:
NameError: name 'strip' is not defined
期望结果:my_list=['1','2','3']
我想使用map获取字符串列表:
value = '1, 2, 3'
my_list = list(map(strip, value.split(',')))
但是收到了:
NameError: name 'strip' is not defined
期望结果:my_list=['1','2','3']
strip
仍然只是一个变量,并不是对每个字符串应用str.strip()
方法的引用。
你可以在这里使用未绑定的str.strip
方法:
my_list = list(map(str.strip, value.split(',')))
这将适用于任何str
实例:
>>> value = '1, 2, 3'
>>> list(map(str.strip, value.split(',')))
['1', '2', '3']
如果您想调用一个以字符串命名的方法,并且有多种类型都恰好支持该方法(因此未绑定的方法引用无法工作),则可以使用operator.methodcaller()
对象:
from operator import methodcaller
map(methodcaller('strip'), some_mixed_list)
不过,如果你想要输出列表对象的话,我建议使用列表推导式而不是map()
:
[v.strip() for v in value.split(',')]
map
方法和列表推导式一样符合Python的风格。map
方法本来就是为这种情况设计的。而且它更短,性能也更好。 - MestreLion_
,我们该怎么传递它呢? - Hayatmethodcaller()
还可以带参数:methodcaller('strip', '_')
。 - Martijn Pieters您也可以使用 lambda
来实现您的目的,方法如下:
my_list = map(lambda x:x.strip(), value.split(","))
将value.split(",")
中的每个元素作为参数x
传递给lambda x:x.strip()
,然后调用strip()
方法。
map()
并不返回一个列表。你是不是想说list(map(...))
呢? - Martijn Pietersmap(str.strip, "1, 2, 3".split(","))
- Dima Tisnek