如何在Python中对包含整数和列表的混合列表进行排序?
解决混合类型列表的排序问题
你遇到的类型错误是因为Python默认排序时会直接比较列表中的所有元素,但整数(int)和列表(list)属于不同类型,无法直接进行大小比较,所以会抛出TypeError。不过通过自定义排序规则,完全可以实现你想要的效果。
实现步骤
- 先处理嵌套子列表:将原列表中的子列表先单独排序,确保子列表内部有序;
- 自定义排序key:给整数和列表分配不同的排序优先级,让所有整数排在列表前面,同时各自按规则排序。
代码实现
# 原始输入 input_list = [3, 1, 0, 4, 1, [5, 4, 7]] # 第一步:处理嵌套子列表,先将子列表内部排序 processed_list = [] for item in input_list: if isinstance(item, list): processed_list.append(sorted(item)) else: processed_list.append(item) # 第二步:自定义key排序,整数优先级为0(排在前),列表优先级为1(排在后) output = sorted(processed_list, key=lambda x: (0, x) if isinstance(x, int) else (1, x)) print(output) # 输出: [0, 1, 1, 3, 4, [4, 5, 7]]
补充说明
- 如果原列表中有多个子列表,它们会在整数排序完成后,按照自身的内容进行排序(比如
[1,3]会排在[2,2]前面,因为[1,3] < [2,2]); - 自定义key的逻辑是:给整数返回元组
(0, x),给列表返回(1, x),元组比较时会先比较第一个元素,0小于1,所以所有整数自然排在列表前面,然后再比较第二个元素实现各自的排序。
内容的提问来源于stack exchange,提问作者Anshuman Sharma
相关产品推荐
相关产品推荐

