将列表拆分为子列表中的元素,然后将元素连接到子列表中

2024-10-02 16:31:14 发布

您现在位置:Python中文网/ 问答频道 /正文

给出以下列表:

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

我想在“\n”处分开,这是我有意为这个目标附加的。在

所以我想找一些类似的东西:

^{pr2}$

然后我想在每个子列表之间加上一个空白,如:

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

这可能是件容易做的事,但我已经试了好几个小时了,不知道该怎么做。我一直在google上搜索,在Stackoverflow中也看到了一些关于使用intertools.groupby的问题,但我无法复制相同的结果。在

我会很感激你的帮助!在

非常感谢。在


Tags: 目标列表mygooglestackoverflow空白list小时
3条回答

这里有一种方法可以直接到达您期望的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']]

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

^{pr2}$

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

>>> 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']]

我建议不要使用join to string,然后再拆分答案。groupby(或等效for loop)更好

>>> 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']]

你可以像这样直接进入最后一步

^{pr2}$

如果需要列表,可以执行以下操作:

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

您只需要字符串:

^{pr2}$

相关问题 更多 >