我是靠谱客的博主 拉长战斗机,最近开发中收集的这篇文章主要介绍Python sort排序 字符串中含有数字 数字10排在数字2前面问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. sort直接排序

arrRes = ['学生2', '学生1', '学生10', '学生4', '学生3']
arrRes.sort()
print(arrRes )
# ['学生1', '学生10', '学生2', '学生3', '学生4']

含有数字的字符串数组直接使用.sort()排序,得到的结果往往跟我们想要的有些出入。如上,我们想要的结果是[‘学生1’, ‘学生2’, ‘学生3’, ‘学生4’, ‘学生10’],但结果却是[‘学生1’, ‘学生10’, ‘学生2’, ‘学生3’, ‘学生4’]。因为按顺序比较字符串到第三个字符的时候1比2小,所以‘学生10’排在‘学生2’前面了,而不会把10当成一个数字整体跟2进行比较。

2. 借用函数自定义排序

所以对于这种字符串跟数字排列比较有规律的,可以人为将它分成两个或多个部分进行比较。

使用匿名函数,第一个参数用来排序字符串,第二个参数用来排序数字。数字排序必须转成int或者其他数字格式,不然字符串10还是排在2前面。

arrRes = ['学生2', '学生1', '学生10', '学生4', '学生3']
arrRes.sort(key=lambda arr: (arr[:2], int(arr[2:])))
print(arrRes)
# ['学生1', '学生2', '学生3', '学生4', '学生10']

3. 扩展

二维数组同理:

arrRes = [['五班', '学生2'],
		   ['一班', '学生1'],
		   ['五班', '学生3'],
		   ['一班', '学生10'],
		   ['一班', '学生2'],
		   ['一班', '学生3'],
		   ['五班', '学生4'],
		   ['五班', '学生1']]
arrRes.sort(key=lambda arr: (arr[0], arr[1][:2], int(arr[1][2:])))
print(arrRes)
# [['一班', '学生1'], ['一班', '学生2'], ['一班', '学生3'], ['一班', '学生10'], ['五班', '学生1'], ['五班', '学生2'], ['五班', '学生3'], ['五班', '学生4']]

如果排序方法太复杂,可以将函数提出来,效果是一样的。

def customeSort(arr):
	return arr[0], arr[1][:2], int(arr[1][2:])


arrRes = [['五班', '学生2'],
		   ['一班', '学生1'],
		   ['五班', '学生3'],
		   ['一班', '学生10'],
		   ['一班', '学生2'],
		   ['一班', '学生3'],
		   ['五班', '学生4'],
		   ['五班', '学生1']]
arrRes.sort(key=customeSort)
print(arrRes)

最后

以上就是拉长战斗机为你收集整理的Python sort排序 字符串中含有数字 数字10排在数字2前面问题的全部内容,希望文章能够帮你解决Python sort排序 字符串中含有数字 数字10排在数字2前面问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部