排序一个句子和数字的列表

时间:2016-09-18 01:52:14

标签: python python-3.x

我已经检查了几个关于如何在python中对列表进行排序的答案,但我无法弄清楚这个。

假设我有一个这样的列表: ['今天是美好的一天,1','昨天是一个奇怪的日子,2','感觉充满希望,3']

有没有办法按每个句子后的数字排序?

我正在尝试自己学习这些东西,所以我尝试了类似的东西:

def sortMyList(string):
    return len(string)-1

sortedList = sorted(MyList, key=sortMyList())

但当然它不起作用因为sortMyList需要一个参数。

3 个答案:

答案 0 :(得分:3)

由于目前为止没有人对您的编码尝试发表评论:

def sortMyList(string):
    return len(string)-1

sortedList = sorted(MyList, key=sortMyList())

你正在路上,但有一些问题。首先,key参数需要一个函数。该函数应为sortMyListsortMyList()将是调用函数的结果 - 此外,您的函数有一个参数(应该如此),所以不带参数调用它就不会&# 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]))