Python 映射字符串分割列表
我想把 str.split
这个函数应用到一个字符串数组上。也就是说,我想把这个数组里所有符合相同格式的字符串都拆分开。有没有什么办法可以用 map
在 Python 中做到这一点?比如说,我们假设有这样一个列表:
a = ['2011-12-22 46:31:11','2011-12-20 20:19:17', '2011-12-20 01:09:21']
我想通过空格来拆分这些字符串(split(" ")
),然后用 map 得到一个这样的列表:
[['2011-12-22', '46:31:11'], ['2011-12-20', '20:19:17'], ['2011-12-20', '01:09:21']]
5 个回答
10
这是我做的方式:
>>> 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']]
这个方法只有在你确定你有一个字符串列表时才有效(也就是说,不能仅仅是一些实现了与字符串兼容的 split
方法的东西)。它还依赖于 split()
的默认行为,这个方法会在任何空白字符上进行分割,而不是像 x.split(' ')
这样只在空格字符上分割(也就是说,它不会处理制表符、换行符或其他空白字符),因为用这种方法你不能传递其他参数。如果你需要更复杂的调用行为,我会使用列表推导式。
42
map(lambda x: x.split(), a)
不过,使用列表推导式
[x.split() for x in a]
在这种情况下要清晰得多。
62
虽然这个功能不太为人所知,但其实有一个专门为这个目的设计的函数,叫做 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']
>>> list(map(methodcaller("split", " "), a))
[['2011-12-22', '46:31:11'], ['2011-12-20', '20:19:17'], ['2011-12-20', '01:09:21']]
这种方法比用 lambda 表达式的其他做法要快。