在Python中,如何排序字符串列表,其比较位置会变化?

4 投票
4 回答
4602 浏览
提问于 2025-04-16 15:30

我有一个字符串列表,这些字符串中有两个短横线把文本分开,比如:

Wednesday-Morning-Go bowling
Sunday-Really late at night-Sleep
July-Noon-BBQ

我想用Python按照字符串最后一部分的字母顺序来排序,也就是从第二个短横线开始的部分。请问在Python中有没有办法做到这一点?例如,排序后我希望列表看起来是这样的。

July-Noon-BBQ
Wednesday-Morning-Go bowling
Sunday-Really late at night-Sleep

(我使用的是Python 2.6。)

4 个回答

1

简单来说,你可以使用 sortsorted 这两个方法,给它一个可选的 key 参数,这个参数是一个函数,用来提取你想要排序的关键部分。在这个例子中,我们是通过在字符串中找到 - 这个字符来分割字符串,然后选择最后一部分来进行排序。

sorted_list = sorted(mylist, key=lambda line: line.rsplit("-", 1)[-1])

1

使用 sorted 函数的 key 参数:

>>> L=['Wednesday-Morning-Go bowling','Sunday-Really late at night-Sleep','July-Noon-BBQ']
>>> sorted(L,key=lambda x: x.split('-')[2])
['July-Noon-BBQ', 'Wednesday-Morning-Go bowling', 'Sunday-Really late at night-Sleep']
8

你可以使用 key 属性来对 list.sort() 进行排序:

a = ["Wednesday-Morning-Go bowling", "Sunday-Really late at night-Sleep",
     "July-Noon-BBQ"]
a.sort(key=lambda x: x.split("-", 2)[-1])
print a

打印结果是

['July-Noon-BBQ', 'Wednesday-Morning-Go bowling', 'Sunday-Really late at night-Sleep']

注意,split() 这个函数可以处理超过两个连字符。第二个连字符之后的所有连字符都会被忽略,并且会被包含在第三部分中。

撰写回答