Dem*_*ene 2 python sorting list
我知道如何使用sort()
方法和适当的 lambda 规则在 Python 中简单地对列表进行排序。但是我不知道如何处理以下情况:
我有一个字符串列表,要么只包含字母,要么包含一个特定的关键字和一个数字。我想先对列表进行排序,以便将带有关键字的元素放在最后,然后按它们包含的数字对它们进行排序。
例如,我的列表可能是:mylist = ['abc','xyz','keyword 2','def','keyword 1']
并且我希望它排序为['abc','def','xyz','keyword 1','keyword 2']
.
我已经有类似的东西
mylist.sort(key=lambda x: x.split("keyword")[0],reverse=True)
Run Code Online (Sandbox Code Playgroud)
只产生
['xyz', 'def', 'abc', 'keyword 2', 'keyword 1']
Run Code Online (Sandbox Code Playgroud)
一个班轮解决方案:
mylist.sort(key=lambda x: (len(x.split())>1, x if len(x.split())==1 else int(x.split()[-1]) ) )
Run Code Online (Sandbox Code Playgroud)
说明:
第一个条件len(x.split())>1
确保多词串在单词串后面,因为它们可能有数字。因此,由于第一个条件,现在关系将仅在单字串与单字串或多字串与多字串之间存在。请注意,多字串和单字串不会有任何联系。因此,如果多字字符串我返回一个整数,否则返回字符串本身。
例子:
['xyz', 'keyword 1000', 'def', 'abc', 'keyword 2', 'keyword 1']
结果 :
>>> mylist=['xyz', 'keyword 1000', 'def', 'abc', 'keyword 2', 'keyword 1']
>>> mylist.sort(key=lambda x: (len(x.split())>1, x if len(x.split())==1 else int(x.split()[-1]) ) )
>>> mylist
['abc', 'def', 'xyz', 'keyword 1', 'keyword 2', 'keyword 1000']
Run Code Online (Sandbox Code Playgroud)