我已经检查了几个关于如何在python中对列表进行排序的答案,但我无法弄清楚这个。
假设我有一个这样的列表: ['今天是美好的一天,1','昨天是一个奇怪的日子,2','感觉充满希望,3']
有没有办法按每个句子后的数字排序?
我正在尝试自己学习这些东西,所以我尝试了类似的东西:
def sortMyList(string):
return len(string)-1
sortedList = sorted(MyList, key=sortMyList())
但当然它不起作用因为sortMyList需要一个参数。
答案 0 :(得分:3)
由于目前为止没有人对您的编码尝试发表评论:
def sortMyList(string):
return len(string)-1
sortedList = sorted(MyList, key=sortMyList())
你正在路上,但有一些问题。首先,key
参数需要一个函数。该函数应为sortMyList
。 sortMyList()
将是调用函数的结果 - 此外,您的函数有一个参数(应该如此),所以不带参数调用它就不会&# 39;工作。只需参考函数本身。
sortedList = sorted(MyList, key=sortMyList)
接下来,您需要告诉sorted
比较两个字符串时实际比较的内容。 len(string)-1
获取字符串的长度并减去一个字符串。这会产生按字符串长度排序字符串的效果,这不是您要查找的字符串。您希望字符位于该索引的字符串中,因此sorted
将查看所有这些字符以形成比较基础。
def sortMyList(string):
return string[len(string)-1]
接下来,您可以使用负索引而不是计算字符串的长度,直接获取最后一个字符:
def sortMyList(string):
return string[-1]
接下来,我们要处理多位数字。看起来在数字之前有一个逗号,所以我们将从右边开始分割(如果句子本身有逗号)。我们只需要第一次拆分,因此我们指定maxsplit
1
:
def sortMyList(string):
return string.rsplit(',', maxsplit=1)[1]
这会遇到一个问题:这些"数字"实际上仍然是字符串,所以当你比较它们时,它将按字母顺序进行,将" 10"之前" 2"等等。要解决此问题,请在返回之前将数字转换为整数:
def sortMyList(string):
return int(string.rsplit(',', maxsplit=1)[1])
全部放在一起:
def sortMyList(string):
return int(string.rsplit(',', maxsplit=1)[1])
sortedList = sorted(MyList, key=sortMyList)
答案 1 :(得分:2)
你可以这样做
>>> sorted(l, key=lambda x : int(x.split(',')[-1]))
['Today is a good day,1', 'yesterday was a strange day,2', 'feeling hopeful,3']
>>>
如果您的字符串中的数字恰好有多个数字
,这也会有效>>> l = ['Today is a good day,12', 'yesterday was a strange day,21', 'feeling hopeful,23']
>>> sorted(l, key=lambda x : int(x.split(',')[1]))
['Today is a good day,12', 'yesterday was a strange day,21', 'feeling hopeful,23'] # still works
>>> sorted(l, key=lambda x : x[-1])
['yesterday was a strange day,21', 'Today is a good day,12', 'feeling hopeful,23'] # doesn't work in this scenario
答案 2 :(得分:0)
这对我有用:
sorted(myList, key=lambda x: x[-1])
如果你需要进入两位数:
sorted(myList, key=lambda x: int(x.split(',')[1]))