拆分列表,然后加入子列表中的元素

时间:2014-02-03 23:57:02

标签: python

给出以下列表:

my_list = ['A > 1', 'B > 2', '\n', 'C > 3', 'D > 4', '\n', 'E > 5', 'F > 6', '\n']

我想拆分“\ n”,我故意为此目标附加。

所以我试图得到类似的东西:

my_list2 = [['A > 1', 'B > 2'], ['C > 3', 'D > 4'], ['E > 5', 'F > 6']]

然后我想加入每个子列表,中间有一个空格,如:

my_list3 = [['A > 1 B > 2'], ['C > 3 D > 4'], ['E > 5 F > 6']]

这可能是一件容易的事情,但我已经尝试了几个小时,我无法弄清楚如何做到这一点。我一直在谷歌搜索,并在Stackoverflow中看到一些问题,谈论使用intertools.groupby,但我无法复制相同的结果。

我将不胜感激任何帮助!

非常感谢。

3 个答案:

答案 0 :(得分:2)

这是一种直接进入预期my_list3的方法:

>>> my_list = ['A > 1', 'B > 2', '\n', 'C > 3', 'D > 4', '\n', 'E > 5', 'F > 6', '\n']
>>> [[x] for x in ' '.join(my_list).strip().split(' \n ')]
[['A > 1 B > 2'], ['C > 3 D > 4'], ['E > 5 F > 6']]

如果您不需要将每个元素包装在自己的列表中,则更简单,因为您不需要列表理解:

>>> ' '.join(my_list).strip().split(' \n ')
['A > 1 B > 2', 'C > 3 D > 4', 'E > 5 F > 6']

如果你确实需要计算中间列表:

>>> from itertools import groupby
>>> [list(g) for k, g in groupby(my_list, lambda x: x != '\n') if k]
[['A > 1', 'B > 2'], ['C > 3', 'D > 4'], ['E > 5', 'F > 6']]

答案 1 :(得分:2)

我建议远离join-to-string-then-then-split-again答案。 groupby(或等效的循环)更好

>>> from itertools import groupby
>>> my_list = ['A > 1', 'B > 2', '\n', 'C > 3', 'D > 4', '\n', 'E > 5', 'F > 6', '\n']
>>> [list(g) for k, g in groupby(my_list, "\n".__ne__) if k]
[['A > 1', 'B > 2'], ['C > 3', 'D > 4'], ['E > 5', 'F > 6']]

您可以直接进入最后一步

>>> [" ".join(g) for k, g in groupby(my_list, "\n".__ne__) if k]
['A > 1 B > 2', 'C > 3 D > 4', 'E > 5 F > 6']

答案 2 :(得分:1)

如果你想要列表,你可以这样做:

>>> [[i.strip()] for i in " ".join(my_list).strip().split("\n")]
[['A > 1 B > 2'], ['C > 3 D > 4'], ['E > 5 F > 6']]

如果你只想要字符串,你可以这样做:

>>> [i.strip() for i in " ".join(my_list).strip().split("\n")]
['A > 1 B > 2', 'C > 3 D > 4', 'E > 5 F > 6']