首先对字符串数组进行排序,然后在Python 3中按字母顺序排序

时间:2017-09-29 08:35:59

标签: python arrays python-3.x sorting

如何首先按照单词的长度(最长到最短)对python中的数组进行排序,然后按字母顺序排序?

这就是我的意思:

我有这个清单:WordsArray = ["Lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit", "sed", "do", "eiusmod", "tempor", "incididunt"]

我想输出:['consectetur', 'adipiscing', 'incididunt', 'eiusmod', 'tempor', 'dolor', 'ipsum', 'Lorem', 'amet', 'elit', 'sed', 'sit', 'do']

我已经可以使用print (sorted(WordsArray))按字母顺序排序:

['Lorem', 'adipiscing', 'amet', 'consectetur', 'do', 'dolor', 'eiusmod', 'elit', 'incididunt', 'ipsum', 'sed', 'sit', 'tempor']

2 个答案:

答案 0 :(得分:4)

首先,使用 sorted不按字母顺序排序,请查看您的输出...我很确定L未来在a之前。您目前正在做的是区分大小写排序。

您可以使用Key Function执行不区分大小写的排序:

>>> words_list = ["Lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit", "sed", "do", "eiusmod", "tempor", "incididunt"]
>>> sorted(words_list, key=str.lower)
['adipiscing', 'amet', 'consectetur', 'do', 'dolor', 'eiusmod', 'elit', 'incididunt', 'ipsum', 'Lorem', 'sed', 'sit', 'tempor']

然后,您可以修改Key Function,如下所示,首先按长度排序,然后按字母顺序排序:

>>> def custom_key(str):
...   return -len(str), str.lower()
... 
>>> sorted(words_list, key=custom_key)
['consectetur', 'adipiscing', 'incididunt', 'eiusmod', 'tempor', 'dolor', 'ipsum', 'Lorem', 'amet', 'elit', 'sed', 'sit', 'do']

答案 1 :(得分:3)

您可以使用元组作为键,首先指定字符串-len(x)的负长度,然后指定x本身:

sorted(WordsArray, key=lambda x: (-len(x),x))

由于元组按第一个元素排序,如果 ex aequo 由第二个元素排序等等,我们首先比较两个字符串的-len(x),以便意味着首先对较大的字符串进行排序。

如果两个字符串的长度相同,我们会按x进行比较,按字母顺序进行比较。

请注意,对两个字符串进行排序是区分大小写:Python按字典顺序对它们进行排序,但是顺序由第一个字符的ord(..)指定,等等。如果要按字母顺序排序,您最好将大写和小写转换为相同的大小写。处理此问题的一种快速方法是:

sorted(WordsArray, key=lambda x: (-len(x),x.lower()))

但这并不总是正确的:因为例如德语中的est-zet有时会转换为ss等等。事实上,按字母顺序排序在某些语言中是一个非常难的问题。因此,在这种情况下,您需要指定整理