簡體   English   中英

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

[英]Split list in and then join elements in sublists

給出以下列表:

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

我想分開使用“ \\ 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 ,但是我無法復制相同的結果。

我將不勝感激任何幫助!

非常感謝。

這是一種直接進入您期望的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']]

我建議您不要使用再次加入字符串然后拆分的答案。 groupby (或等效的for循環)更好

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM