首页 > Python笔记 阅读数:17

Python list列表元素的计数与排序

列表元素除了可以添加和删除外,还可以进行其他操作。本节教程就来具体介绍。

Python列表元素的计数与索引

列表中的 count( ) 方法也很常用,它能够统计某个元素在列表中出现的次数。

如果我们想从列表中找出某个给定值的第一个匹配项的索引位置,则可以采用 index( ) 方法。

如果仅仅是判断某个元素是否存在于列表之中,使用运算符 in(出现)或 not in(不出现)即可,这些方法会返回一个 True 或 False 的布尔值。代码如下所示。
In [24]: fruits = [ 'orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
In [25]: fruits.count('apple')          #元素'apple'在列表 fruits 中出现的次数
Out[25]: 2
In [26]: fruits.index('apple')          #元素'apple'在列表 fruits 中首次出现的索引值
Out[26]: 1
In [27]: 'pear' in fruits               #'pear' 在列表 fruits 中吗?
Out[27]: True                           #测试结果:在(True )
In [28]: 'potato' not in fruits         #'potato'不在列表 fruits 中?
Out[28]: True                           #测试结果为:不在(True )

Python列表元素的排序与逆序

列表还为我们提供了非常方便的排序和逆序输出功能。前者使用的方法是 sort( ),后者使用的方法是 reverse( ),示例代码如下。
In [29]: fruits = [ 'orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
In [30]: fruits.sort()         #按字典顺序排序
In [31]: fruits
Out[31]: [ 'apple', 'apple', 'banana', 'banana', 'kiwi', 'orange', 'pear']
In [32]: fruits.reverse()      #按字典逆序排序           
In [33]: fruits                #验证         
Out[33]: [ 'pear', 'orange', 'pear', 'kiwi', 'banana', 'banana', 'apple', 'apple']

在上面代码的 In [30] 处,我们使用列表的 sort( ) 方法对原列表元素进行排序,默认规则是直接比较元素大小。如果在 sort( ) 方法内指定参数,则可完成特定规则的排序。

sort( ) 方法原型如下。
list.sort(cmp=None, key=None, reverse=False)

该函数的三个参数都有默认值,也就是说,如果不指定值,它们会启用等号=后面的默认值。其中,cmp 是可选参数,如果指定了该参数(通常是一个指定排序规则的函数),sort( ) 方法会使用该参数描述的规则进行排序。key 用来指定排序比较的元素。reverse 用来指定排序的升降规则,reverse = True 表示降序,reverse = False 表示升序(默认)。

除了可用 Python 列表内置的 sort( ) 方法排序,也可以用 Python 内置的全局函数 sorted( ) 对可迭代的列表对象进行排序,从而生成新的列表。
In [1]: fruits = [ 'orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
In [2]: sorted(fruits, reverse=True)       #直接返回结果
Out[2]: [ 'pear', 'orange',  'kiwi', 'banana', 'banana', 'apple', 'apple']
In [3]: fruits                             #验证fruits是否有效                
Out[3]: [ 'orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']

使用列表的内置方法 sort( ) 对列表排序会“伤筋动骨”,修改列表本身的数据。而全局内置函数 sorted( ) 则不同,它会复制原始列表的一个副本,然后在副本上进行排序操作,在排序后,原始列表依旧“安然无恙”(参考 Out[3] 处的输出)。我们可以根据自己的需要来选择更适用于自己问题场景的方法。

列表中还有很多功能强大的内置方法,我们可以用 dir(list) 命令列举出来,具体用法读者可以自行查阅,我们会在后续的范例中逐步使用这些方法。
In [1]: dir(list)
Out[1] : [ '_add_', '_class_', '_contains_', '_delattr_', '_delitem_', '_dir_', '_doc_', '_eq_', '_format_', '_ge_', '_getattribute_', '_getitem_', '_gt_', '_hash_', '_iadd_', '_imul_',  '_init_', '_init_subclass_', '_iter_', '_le_', '_len_', '_It_', '_mul_', '_ne_', '_new_', '_reduce_', '_reduce_ex_', '_rep_', '_reversed_', '_rmul_', '_setattr_', '_setitem_',    '_sizeof_', '_str_', '_subclasshook_', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'sort' ]

相关文章