python map字符串拆分列表

pac*_*erg 31 python string parsing functional-programming

我试图将str.split函数映射到字符串数组.也就是说,我想将字符串数组中的所有字符串拆分为相同的格式.知道如何map在python中做到这一点?例如,假设我们有一个这样的列表:

>>> a = ['2011-12-22 46:31:11','2011-12-20 20:19:17', '2011-12-20 01:09:21']
Run Code Online (Sandbox Code Playgroud)

想要按空格分割字符串(split(""))使用map将列表设置为:

>>> [['2011-12-22', '46:31:11'], ['2011-12-20', '20:19:17'], ['2011-12-20', '01:09:21']]
Run Code Online (Sandbox Code Playgroud)

Ray*_*ger 42

虽然它并不为人所知,但是有一个专门为此目的设计的功能,operator.methodcaller:

>>> from operator import methodcaller
>>> a = ['2011-12-22 46:31:11','2011-12-20 20:19:17', '2011-12-20 01:09:21']
>>> map(methodcaller("split", " "), a)
[['2011-12-22', '46:31:11'], ['2011-12-20', '20:19:17'], ['2011-12-20', '01:09:21']]
Run Code Online (Sandbox Code Playgroud)

这种技术比使用lambda表达式的等效方法更快.


Rus*_*ias 24

map(lambda x: x.split(), a)但是,[x.split() for x in a]在这种情况下,使用列表理解更加清晰.

  • 即使OP明确要求"map",这个答案表明使用列表理解它更干净,更Pythonic. (5认同)
  • @kojiro 这是非常主观的。来自函数式编程背景,该映射比列表理解更容易阅读/更清晰(对我来说)。 (2认同)

phi*_*hag 7

使用map结合的功能.一个简洁的方法是使用lambda函数:

>>> a=['2011-12-22 46:31:11','2011-12-20 20:19:17', '2011-12-20 01:09:21']
>>> map(lambda s: s.split(), a)
[['2011-12-22', '46:31:11'], ['2011-12-20', '20:19:17'],
 ['2011-12-20', '01:09:21']]
Run Code Online (Sandbox Code Playgroud)

  • 你可以用“map(str.split, a)”来简化 (3认同)

Ben*_*Ben 7

我是这样做的:

>>> a=['2011-12-22 46:31:11','2011-12-20 20:19:17', '2011-12-20 01:09:21']
>>> map(str.split, a)
[['2011-12-22', '46:31:11'], ['2011-12-20', '20:19:17'], ['2011-12-20', '01:09:21']]
Run Code Online (Sandbox Code Playgroud)

这仅在您知道自己有一个列表时才会起作用str(例如,不仅仅是以split兼容方式实现该方法的事物列表str).它还依赖于使用默认行为split(),它在任何空格上拆分,而不是使用x.split(' '),它只拆分空格字符(即不是制表符,换行符或其他空格),因为你不能使用这种方法传递另一个参数.对于比这更复杂的调用行为,我会使用列表理解.

  • 如何给出像 "\t" 和 "1" 这样的分割参数 (2认同)