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

如何按字符串长度将字符串列表拆分为子列表?

嘿,这个按字符串长度分组的需求用Python实现超简单,我给你几种实用的方案:

方法1:基础字典实现(适合理解原理)

手动用字典存储不同长度对应的字符串列表,遍历原列表时把每个元素归到对应的组里:

original_list = ['My', 'Is', 'Name', 'Hello', 'William']
length_groups = {}

for s in original_list:
    str_length = len(s)
    # 如果当前长度还没作为键存在,就初始化一个空列表
    if str_length not in length_groups:
        length_groups[str_length] = []
    length_groups[str_length].append(s)

# 把字典的值转换成列表,就是我们要的结果
result = list(length_groups.values())
print(result)  # 输出: [['My', 'Is'], ['Name'], ['Hello'], ['William']]

方法2:用collections.defaultdict简化代码

Python的collections模块里的defaultdict可以自动为不存在的键初始化默认值,省去了判断键是否存在的步骤,代码更简洁:

from collections import defaultdict

original_list = ['My', 'Is', 'Name', 'Hello', 'William']
length_groups = defaultdict(list)

for s in original_list:
    # 直接按长度添加,defaultdict会自动创建空列表
    length_groups[len(s)].append(s)

result = list(length_groups.values())
print(result)

方法3:保证分组按长度从小到大排序

如果原列表里的元素长度顺序比较乱,想要最终的分组列表严格按长度从小到大排列,可以对字典的键排序后再取值:

from collections import defaultdict

original_list = ['My', 'Is', 'Name', 'Hello', 'William']
length_groups = defaultdict(list)

for s in original_list:
    length_groups[len(s)].append(s)

# 按长度升序排序后提取对应的分组
result = [length_groups[length] for length in sorted(length_groups.keys())]
print(result)

注意:Python 3.7及以上版本的普通字典是保留插入顺序的,所以方法1和2的结果顺序会和原列表中首次出现的长度顺序一致,刚好符合你给出的示例结果。如果用的是更早的Python版本,普通字典不保证顺序,那推荐用方法3或者OrderedDict来确保顺序~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:45:19