Python整数列表排序时报错TypeError: int object is not subscriptable求助
Python整数列表排序时报错TypeError: int object is not subscriptable求助
嗨,我来帮你排查这个问题~
首先,咱们先拆解报错的原因:你写的koko(a)函数里,当执行a.sort(key=koko)时,koko会接收列表里的每一个整数元素作为参数a(比如第一个元素是0),而你试图用a[1]去访问这个整数的下标——但整数是单个值,根本没有下标可以访问,所以才会抛出TypeError: 'int' object is not subscriptable的错误。另外,return a:a[1]本身也是语法错误,Python里没有这种写法哦。
再看你的需求:输入0 1 1 3 2 5 2后,想要得到拼接结果1012235,也就是排序后的列表是[1, 0, 1, 2, 2, 3, 5]。看起来你是想让最小的非零元素排在第一位,接着放0,剩下的元素再按从小到大排序。
那我们可以换一种思路实现,不用错误的key函数,而是拆分列表后重新组合:
n = int(input("Enter number of elements : ")) a = list(map(int, input("\nEnter the numbers : ").strip().split()))[:n] # 拆分列表为非零元素和零元素,分别处理 non_zero = sorted([x for x in a if x != 0]) zeros = [x for x in a if x == 0] # 按需求组合:第一个非零元素 + 所有零 + 剩下的非零元素 if non_zero: sorted_list = [non_zero[0]] + zeros + non_zero[1:] else: # 如果全是零,直接返回原排序结果 sorted_list = zeros print('Sorted list:', sorted_list) print('Result:', ''.join(map(str, sorted_list)))
当你输入0 1 1 3 2 5 2时,这段代码会输出:
Sorted list: [1, 0, 1, 2, 2, 3, 5] Result: 1012235
完全符合你想要的结果~
如果你还有其他自定义排序的需求,也可以告诉我,咱们再调整逻辑!
备注:内容来源于stack exchange,提问作者Newbieee_TwT
相关产品推荐
相关产品推荐

