Python 映射字符串分割列表

46 投票
5 回答
81530 浏览
提问于 2025-04-17 08:08

我想把 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 表达式的其他做法要快。

撰写回答