如何按子列表末尾值对Python列表进行分组?
Python按子列表末尾元素分组的实现方法
当然可以实现,用Python的字典就能轻松搞定,最方便的是用collections里的defaultdict,步骤很简单:
方法一:使用collections.defaultdict
from collections import defaultdict c_list = [[1,2,1],[4,6,8],[3,4,1],[3,2,8]] # 初始化一个默认字典,每个键对应的默认值是空列表 group_dict = defaultdict(list) # 遍历每个子列表,按末尾元素分组 for sublist in c_list: # 取子列表最后一个元素当分组键 key = sublist[-1] group_dict[key].append(sublist) # 把分组结果转换成你要的格式:组内元素多就留嵌套列表,单个元素就直接用子列表 result = [group if len(group) > 1 else group[0] for group in group_dict.values()] print(result) # 输出:[[[1, 2, 1], [3, 4, 1]], [[4, 6, 8], [3, 2, 8]]]
方法二:不用额外模块,用普通字典实现
如果不想导入模块,用基础字典也能写:
c_list = [[1,2,1],[4,6,8],[3,4,1],[3,2,8]] group_dict = {} for sublist in c_list: key = sublist[-1] # 键不存在就创建空列表 if key not in group_dict: group_dict[key] = [] group_dict[key].append(sublist) # 同样转换格式 result = [group if len(group) > 1 else group[0] for group in group_dict.values()]
注:你给出的示例结果里,末尾为8的两个子列表各自为组,这和“按末尾元素相同分组”的逻辑矛盾,应该是表述或示例有误。上面的代码是按常规的“同末尾元素归为一组”逻辑实现的,如果有额外分组条件,可以再补充规则调整。
内容的提问来源于stack exchange,提问作者didem
相关产品推荐
相关产品推荐

