You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以5字符字符串为分隔点将Python列表拆分为子列表?

按特定字符串(长度为5)拆分列表的实现方法

问题背景

给定如下输入列表:

data = '''ABCD1
2040805025@HHS_2332
801111@PPOD_1
225@DDMDM
DEFA1
23333@HHS_998
7859000@FGL3
44532009@LLLKH_9
225@DDMDM
FGGH5
78271@WQE
8003013@UTTY7'''.split()

如果按固定长度3拆分,可使用列表推导式:

[data[i:i+3] for i in range(0, len(data), 3)]

输出结果为:

[['ABCD1', '2040805025@HHS_2332', '801111@PPOD_1'],
 ['225@DDMDM', 'DEFA1', '23333@HHS_998'],
 ['7859000@FGL3', '44532009@LLLKH_9', '225@DDMDM'],
 ['FGGH5', '78271@WQE', '8003013@UTTY7']]

现在需要实现每次遇到长度为5的字符串(如ABCD1、DEFA1、FGGH5)时拆分列表,且拆分后的子列表不包含这些长度为5的字符串,最终得到如下目标输出:

[
 ['2040805025@HHS_2332','801111@PPOD_1','225@DDMDM'],
 ['23333@HHS_998','7859000@FGL3','44532009@LLLKH_9','225@DDMDM'],
 ['78271@WQE','8003013@UTTY7']
]

解决方案

方法1:手动遍历分组

通过遍历列表元素,维护一个临时分组列表,遇到长度为5的字符串时将临时分组存入结果并重置,否则将元素加入临时分组。最后处理剩余的临时分组:

data = '''ABCD1
2040805025@HHS_2332
801111@PPOD_1
225@DDMDM
DEFA1
23333@HHS_998
7859000@FGL3
44532009@LLLKH_9
225@DDMDM
FGGH5
78271@WQE
8003013@UTTY7'''.split()

result = []
current_group = []

for item in data:
    if len(item) == 5:
        if current_group:
            result.append(current_group)
            current_group = []
    else:
        current_group.append(item)

# 处理最后一组未存入的内容
if current_group:
    result.append(current_group)

print(result)

方法2:使用itertools.groupby分组

利用itertools.groupby根据元素是否为长度5的字符串进行分组,过滤掉分隔符对应的组,直接收集目标分组:

from itertools import groupby

data = '''ABCD1
2040805025@HHS_2332
801111@PPOD_1
225@DDMDM
DEFA1
23333@HHS_998
7859000@FGL3
44532009@LLLKH_9
225@DDMDM
FGGH5
78271@WQE
8003013@UTTY7'''.split()

# 按元素是否为长度5的字符串分组
result = [list(group) for key, group in groupby(data, lambda x: len(x) == 5) if not key]

print(result)

两种方法都能得到符合要求的目标输出,其中方法1逻辑直观易懂,方法2代码更简洁,适合熟悉itertools库的场景。

内容的提问来源于stack exchange,提问作者Rasec Malkic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 17:33:15