list - 内建函数

来源:互联网 发布:动态效果软件 编辑:程序博客网 时间:2024/06/05 22:39
list.append( obj ) --向列表中添加1个对象 obj
list.count( obj ) --返回对象 obj 在列表中出现的次数
list.extend( seq ) --接收一个列表或迭代对象的内容然后把它的所有元素追加到另一个列表中去
list.index( obj, i = 0, j = len( list ) )
-- 返回 list[k] == obj 的 k 值,并且 k 的范围在 i <= k < j;否则印发 ValueError 异常
list.insert( index, obj )
-- 在索引 index 处 插入对象 obj
list.pop( index == -1 ) --删除并返回指定位置的对象,默认是最后一个对象。
list.remove( obj ) --从列表中删除对象 obj
list.reverse() --原地翻转列表
list.sort( func = None, key = None, reverse = False )
-- 以指定方式排序列表中的成员,如果 func 和 key 参数指定,则按照指定的方式比较各个元素,如果 reverse 标志位 True, 则列表以反序排列。
————————————————————————————————————————————————————————————————————————————————————————————
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a.extend( b )
>>> a


root@snow-desktop:~# cat aaa.txt 
123
321
123
>>> motd = []
>>> motd.append("1234556")
>>> motd
['1234556']
>>> f = open('aaa.txt', 'r')
>>> motd.extend( f )
>>> f.close()
>>> motd
['1234556', '123\n', '321\n', '123\n']




sort参数的完整定义见:
http://docs.python.org/2/library/functions.html#sorted
https://wiki.python.org/moin/HowTo/Sorting/

如果我想降序排序呢,这时就要自定义cmp方法(当然更方便的是numbers.sort(reverse=True))

numbers=[5,2,9,7]
numbers.sort(lambda a,b:b-a)
numbers
[9,7,5,2]
如果数组成员不是数字,而是其它的类型例如dict,想根据某个属性来排序

persons=[{'name':'zhang3','age':15},{'name':'li4','age':12}]
persons
[{'name':'zhang3','age':15},{'name':'li4','age':12}]
persons.sort(lambda a,b:a['age']-b['age'])
persons
[{'age': 12, 'name': 'li4'}, {'age': 15, 'name': 'zhang3'}]








实际上sort()方法在不传入参数func的时候 默认cmp为None。
调用的是lambda x,y: cmp(x, y),而实际上就是调用cmp函数。即:

numbers = [5,2,9,7]
numbers.sort() 
    #sort()函数判断cmp为None,则调用`lambda x,y: cmp(x, y)`
numbers.sort(cmp=None) #等效于numbers.sort()
numbers.sort(cmp=cmp)
    #sort()判断cmp存在,并且不为None,则通过调用`cmp(x,y)`来排序
    #虽然结果是相同的,可实际执行流程是不同的(这里我不确定sort()内部是用匿名函数还是直接用cmp来实现的,不过应该没有多大区别。)
numbers.sort(cmp) 
    #sort()通过*args来寻找是否存在没有指定变量的传入参数。
    #函数判断其是否callalbe,如果是则赋值给cmp
    #函数执行`cmp(x,y)`来排序
numbers.sort(custom_sort_method) 
    #sort()通过*args来寻找是否存在没有指定变量的传入参数。
    #函数判断其是否callalbe,即是否是函数,如果是则赋值给cmp = custom_sort_method
    # 函数调用`cmp(x,y)`来排序,但此时的cmp实际上已经是custom_sort_method方法了
numbers.sort(cmp = custom_sort_method)
    # 此时函数直接发现cmp不为None,则直接执行cmp函数来排序,而此时cmp也已经是custom_sort_method方法了
如果要实现自定义比较函数则需要重新指定cmp为你构造的比较函数,如下:

numbers = [5,2,9,7]
def reverse_numeric(x, y):
    return y - x
numbers.sort(cmp = reverse_numeric)
#也可以直接写成
numbers.sort(revers_numeric)
#或者直接传入匿名函数
numbers.sort(lambda x,y: y-x)
另外,在python3.x中取消了cmp参数,也不支持直接往sort()里面传函数了。可以构造排序函数传递给key来实现。
0 0
原创粉丝点击