Python:基于元素子集将列表拆分为多个列表

2024-10-01 15:33:50 发布

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

我正试图将一个列表拆分成一个单独的列表,每当一个特定的字符或一组字符出现时。在

例如

Main_list = [ 'abcd 1233','cdgfh3738','hryg21','**L**','gdyrhr657','abc31637','**R**','7473hrtfgf'...]

每当遇到“L”或“R”时,我想将此列表拆分并保存到子列表中

期望结果:

^{pr2}$

有没有一个内置的函数或一个快速的方法来做到这一点?在

编辑:我不希望分隔符出现在列表中


Tags: 方法函数编辑列表main字符内置list
3条回答

考虑使用库中许多有用的工具之一,例如^{}

给定

import more_itertools as mit


lst = [
    "abcd 1233", "cdgfh3738", "hryg21", "**L**",
    "gdyrhr657", "abc31637", "**R**", 
    "7473hrtfgf"
]

编码

^{pr2}$

演示

sublist_1, sublist_2, sublist_3 = result

sublist_1
# ['abcd 1233', 'cdgfh3738', 'hryg21']
sublist_2
# ['gdyrhr657', 'abc31637']
sublist_3
# ['7473hrtfgf']

详细信息

more_itertools.split_at函数在满足特殊条件的位置拆分iterable。条件函数(谓词)恰好是lambda函数,它等价于以下正则函数并可替换为:

def pred(x):
    a = set(x)
    b = {"L", "R"}
    return a.intersection(b)

每当字符串x的字符与LR相交时,谓词返回True,并在该位置进行拆分。在

通过^{}在命令行安装此包。在

使用字典查找变量数。在

在这种情况下,您可以使用itertools.groupby来有效地分隔列表:

L = ['abcd 1233','cdgfh3738','hryg21','**L**',
     'gdyrhr657','abc31637','**R**','7473hrtfgf']

from itertools import groupby

# define separator keys
def split_condition(x):
    return x in {'**L**', '**R**'}

# define groupby object
grouper = groupby(L, key=split_condition)

# convert to dictionary via enumerate
res = dict(enumerate((list(j) for i, j in grouper if not i), 1))

print(res)

{1: ['abcd 1233', 'cdgfh3738', 'hryg21'],
 2: ['gdyrhr657', 'abc31637'],
 3: ['7473hrtfgf']}

@多面体,你也可以试试这个。在

>>> import re
>>> Main_list = [ 'abcd 1233','cdgfh3738','hryg21','**L**','gdyrhr657','abc31637','**R**','7473hrtfgf']
>>>
>>> s = ','.join(Main_list)
>>> s
'abcd 1233,cdgfh3738,hryg21,**L**,gdyrhr657,abc31637,**R**,7473hrtfgf'
>>>
>>> items = re.split('\*\*R\*\*|\*\*L\*\*', s)
>>> items
['abcd 1233,cdgfh3738,hryg21,', ',gdyrhr657,abc31637,', ',7473hrtfgf']
>>>
>>> output = [[a for a in item.split(',') if a] for item in items]
>>> output
[['abcd 1233', 'cdgfh3738', 'hryg21'], ['gdyrhr657', 'abc31637'], ['7473hrtfgf']]
>>>
>>> sublist_1 = output[0]
>>> sublist_2 = output[1]
>>> sublist_3 = output[2]
>>>
>>> sublist_1
['abcd 1233', 'cdgfh3738', 'hryg21']
>>>
>>> sublist_2
['gdyrhr657', 'abc31637']
>>>
>>> sublist_3
['7473hrtfgf']
>>>

相关问题 更多 >

    热门问题