在Python中,如何排序字符串列表,其比较位置会变化?
我有一个字符串列表,这些字符串中有两个短横线把文本分开,比如:
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
简单来说,你可以使用 sort
或 sorted
这两个方法,给它一个可选的 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()
这个函数可以处理超过两个连字符。第二个连字符之后的所有连字符都会被忽略,并且会被包含在第三部分中。