如何在 map 函数中使用 strip

19

我想使用map获取字符串列表:

value = '1, 2, 3'

my_list = list(map(strip, value.split(',')))

但是收到了:

NameError: name 'strip' is not defined

期望结果:my_list=['1','2','3']


1
map()并不返回一个列表。你是不是想说list(map(...))呢? - Martijn Pieters
相关:https://dev59.com/5Gct5IYBdhLWcg3wULzo - Dimitris Fasarakis Hilliard
这不是一个重复的问题,即使根本问题相同:这个问题专门询问“map”,而另一个问题则没有,那里接受的答案使用列表解析而不是“map”,这可能是解决问题的次优解。 - MestreLion
最好的情况是,这可能是@DimitrisFasarakisHilliard提到的相关问题的重复。 - MestreLion
map(str.strip, "1, 2, 3".split(",")) - Dima Tisnek
2个回答

44

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将'1, 2, 3'转换为[1,2,3]列表(list(map(int,value))),但后来我改变了想法并决定使用列表推导式。但是列表推导式更符合Python风格。 - Tomasz Brzezina
@TomaszBrzezina:我认为map方法和列表推导式一样符合Python的风格。map方法本来就是为这种情况设计的。而且它更短,性能也更好。 - MestreLion
如果我们想去除除空格以外的其他字符,比如下划线 _,我们该怎么传递它呢? - Hayat
@Hayat methodcaller() 还可以带参数:methodcaller('strip', '_') - Martijn Pieters

7

您也可以使用 lambda 来实现您的目的,方法如下:

my_list = map(lambda x:x.strip(), value.split(","))

value.split(",")中的每个元素作为参数x传递给lambda x:x.strip(),然后调用strip()方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接