Python数据结构对列表按字母顺序排序

222

我对Python中的数据结构有点困惑,例如: (), [], 和 {}。我正在尝试对一个简单的列表进行排序,但可能是因为我无法确定数据类型,所以排序失败了。

我的列表很简单:['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

我的问题是,这是什么类型的数据,如何按字母顺序排序单词?


如果你想对列表进行排序,你可以使用以下代码:"list=['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] list.sort() print list"。 - kannanrbk
[] 包含内置数据类型 list,(参见 http://www.tutorialspoint.com/python/python_lists.htm)。列表只是值的集合(它们可以包含其他可迭代对象——即嵌套列表)。 () 包含内置数据类型 tuple。它们是不可变的(不能被更改)(参见 http://www.tutorialspoint.com/python/python_tuples.htm)。 而 {} 则包含内置数据类型 dictionary。类比于一个词典(针对单词),其中 'key' 是单词, 'value' 是定义。(参见 http://www.tutorialspoint.com/python/python_dictionary.htm)。 - Rushy Panchal
6个回答

322
[] 代表一个 列表() 代表一个 元组{} 代表一个 字典。你应该查看 Python 官方教程,因为这些是 Python 编程的基础。

你所拥有的是一个字符串列表。你可以按照以下方式排序:

In [1]: lst = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

In [2]: sorted(lst)
Out[2]: ['Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim', 'constitute']

正如您所看到的,以大写字母开头的单词比以小写字母开头的单词优先排序。如果要独立排序,请执行以下操作:

In [4]: sorted(lst, key=str.lower)
Out[4]: ['constitute', 'Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim']

你还可以通过以下方式将列表按照相反的顺序进行排序:

In [12]: sorted(lst, reverse=True)
Out[12]: ['constitute', 'Whim', 'Stem', 'Sedge', 'Intrigue', 'Eflux']

In [13]: sorted(lst, key=str.lower, reverse=True)
Out[13]: ['Whim', 'Stem', 'Sedge', 'Intrigue', 'Eflux', 'constitute']
请注意:如果您使用的是Python 3,则str是包含人可读文本的每个字符串的正确数据类型。然而,如果您仍需要使用Python 2,则可能会处理具有数据类型unicode而不是str的Unicode字符串。在这种情况下,如果您有一个Unicode字符串列表,则必须编写key=unicode.lower而不是key=str.lower

使用pymongo中的find_one()方法返回MongoDB数据库中的第二个示例时,我遇到了错误:descriptor 'lower' requires a 'str' object but received a 'unicode'。结果是一个字符串数组,并且实现方式如下:results['keywords'] = sorted(keywords['keywords'], key=str.lower)。有人知道如何解决这个问题吗? - user1063287
@user1063287 对于我的迟回,我感到抱歉。在你的情况下,你需要写 key=unicode.lower 而不是 key=str.lower。这是因为你正在处理 Unicode 字符串,而不是字节字符串。请参考官方的Unicode HOWTO以获取更多关于此的信息,特别是有关 Python 2 和 3 之间差异的信息。 - pemistahl

41

Python有一个内置函数叫做sorted,它可以从任何可迭代对象中返回一个排序后的列表(例如列表([1,2,3])、字典({1:2,3:4},但只会返回键的排序列表)、集合({1,2,3,4})或元组((1,2,3,4)))。

>>> x = [3,2,1]
>>> sorted(x)
[1, 2, 3]
>>> x
[3, 2, 1]

列表还有一个sort方法,它可以原地进行排序(x.sort()返回None但会改变x对象)。
>>> x = [3,2,1]
>>> x.sort()
>>> x
[1, 2, 3]

两者都接受一个key参数,这应该是可调用的(函数/lambda),您可以使用它来更改排序方式。
例如,要从按值排序的字典中获取一个(key,value)对列表,您可以使用以下代码:

>>> x = {3:2,2:1,1:5}
>>> sorted(x.items(), key=lambda kv: kv[1])  # Items returns a list of `(key,value)`-pairs
[(2, 1), (3, 2), (1, 5)]

17

你正在处理一个Python列表,而对其进行排序就像这样简单。

my_list = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']
my_list.sort()

11

您可以使用内置的sorted函数。

print sorted(['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'])

5

ListName.sort()将按字母表顺序对其进行排序。您可以在括号中添加reverse=False/True来颠倒项目的顺序:ListName.sort(reverse=False)


1
这是 Ruby 的注释吗? - allanberry

3
>>> a = ()
>>> type(a)
<type 'tuple'>
>>> a = []
>>> type(a)
<type 'list'>
>>> a = {}
>>> type(a)
<type 'dict'>
>>> a =  ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] 
>>> a.sort()
>>> a
['Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim', 'constitute']
>>> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接