如何按字符串长度将字符串列表拆分为子列表?
嘿,这个按字符串长度分组的需求用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
相关产品推荐
相关产品推荐

