给出以下列表:
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
,但我无法复制相同的结果。
我将不胜感激任何帮助!
非常感谢。
答案 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']