zoukankan      html  css  js  c++  java
  • python中常用的函数与库一

    1, collections.deque

      在python里如果我们用列表作为队列使用也是可以的,只是当从队尾删除或者增加元素的时候是很快的,但是从队首删除或者增加元素则要慢得多,这是因为在队首进行操作其他的元素都要逐一改变。

      collections.deque就是为队列设计的,它能迅速得删除或者增加元素,无论是队首还是队尾

    >>> from collections import deque
    >>> queue = deque(["Eric", "John", "Michael"])
    >>> queue.append("Terry")           # Terry arrives
    >>> queue.append("Graham")          # Graham arrives
    >>> queue.popleft()                 # The first to arrive now leaves
    'Eric'
    >>> queue.popleft()                 # The second to arrive now leaves
    'John'
    >>> queue                           # Remaining queue in order of arrival
    deque(['Michael', 'Terry', 'Graham'])
    

    2, filter() map() reduce()

      filter(function,sequence) 返回一个function(item)为True的序列,当sequence为string的时候,也会返回与string编码相同的字符序列

    >>> def f(x): return x % 3 == 0 or x % 5 == 0
    ...
    >>> filter(f, range(2, 25))
    [3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24]
    
    >>> def f(x):return x == 'a' or x=='b'
    ...
    >>>filter(f, 'abfsagdcb')
    'abab'
    

      map(function,sequence) 会将sequence里的每个元素依次作为参数调用function(item),它会将function(item)的返回值放入列表再返回

    >>> def cube(x): return x*x*x
    ...
    >>> map(cube, range(1, 11))
    [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
    

      map(function,sequence,sequence) 当传入多个序列时,他会依次从每个序列中取出一个元素作为参数调用function(item1,item2),如果序列之间的元素个数不一样,则会在较短的序列中默认添加None作为参数传入

    >>> seq = range(8)
    >>> def add(x, y): return x+y
    ...
    >>> map(add, seq, seq)
    [0, 2, 4, 6, 8, 10, 12, 14]
    
    >>>seq2 = range(7)
    >>>map(add, seq, seq2)
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
      File "<input>", line 1, in add
    TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
    

      reduce(function,sequence) 只返回一个迭代值,第一次传入两个元素到function(item1,item2),之后将result作为一个参数传入并且再从sequence中取出1个元素传入function中,以此类推

    >>> def add(x,y): return x+y
    ...
    >>> reduce(add, range(1, 11))
    55
    

      reduce(function,sequence,init_value) reduce也可以有第三个参数,第三个参数是reduce的初始化值,也就是第一个传入function的值,当然如果sequence是个空序列的话我们也可以让第三个参数为0这样reduce返回的也会是0  

    >>>def add(x, y):return x+y
    >>>reduce(add, range(1,11), 10)
    65
    
    >>>reduce(add, [],0)
    0
    >>>reduce(add, [],10)
    10
    

    3, enumerate() zip() del()

      enumerate(sequence)可以在序列中加上索引,例如:

    >>> for i, v in enumerate(['tic', 'tac', 'toe']):
    ...     print i, v
    ...
    0 tic
    1 tac
    2 toe
    

      zip(sequence1,sequence2) 会从多个序列中依次取出一个值打包成另一个元组,返回多个由元组构成的列表,当sequence长度不一致时以长度最小的序列作为标准,zip(*matrix)也可以传入一个列表

    >>> zip([1,2,3],[1,2,3])
    [(1, 1), (2, 2), (3, 3)]
    ...
    >>> zip([1,2,3],[1,2,3],[1,2,3])
    [(1, 1, 1), (2, 2, 2), (3, 3, 3)]
    ...
    >>> zip([1,2,3],[1,2,])
    [(1, 1), (2, 2)]
    >>> matrix = [
    ...     [1, 2, 3, 4],
    ...     [5, 6, 7, 8],
    ...     [9, 10, 11, 12],
    ... ]
    >>> zip(*matrix)
    [(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]
    

      del() 函数可以移除列表中的元素,以及某个变量

    >>> a = [-1, 1, 66.25, 333, 333, 1234.5]
    >>> del a[0]
    >>> a
    [1, 66.25, 333, 333, 1234.5]
    >>> del a[2:4]
    >>> a
    [1, 66.25, 1234.5]
    >>> del a[:]
    >>> a
    []
    ...
    >>> del a
    >>>a
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    NameError: name 'a' is not defined
    

    4, set() 用于创建集合,如下所示集合的一些操作:

    >>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
    >>> fruit = set(basket)               # create a set without duplicates
    >>> fruit
    set(['orange', 'pear', 'apple', 'banana'])
    >>> 'orange' in fruit                 # fast membership testing
    True
    >>> 'crabgrass' in fruit
    False
    
    >>> # Demonstrate set operations on unique letters from two words
    ...
    >>> a = set('abracadabra')
    >>> b = set('alacazam')
    >>> a                                  # unique letters in a
    set(['a', 'r', 'b', 'c', 'd'])
    >>> a - b                              # letters in a but not in b
    set(['r', 'd', 'b'])
    >>> a | b                              # letters in either a or b
    set(['a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'])
    >>> a & b                              # letters in both a and b
    set(['a', 'c'])
    >>> a ^ b                              # letters in a or b but not both
    set(['r', 'd', 'b', 'm', 'z', 'l'])
    

    5, sorted() reversed() sort() reverse()

      sort()是可变对象(列表)的方法,无参数,无返回值,sort()会改变可变对象,因此无需返回值。sort()方法是可变对象独有的方法或者属性,而作为不可变对象如元组、字符串是不具有这些方法的,如果调用将会返回一个异常。

      sorted()是python的内置函数,并不是可变对象(列表、字典)的特有方法,sorted()函数需要一个参数(参数可以是列表、字典、元组、字符串),无论传递什么参数,都将返回一个以列表为容器的返回值,如果是字典将返回键的列表。

        reverse()与sort()的使用方式一样,而reversed()与sorted()的使用方式相同

    >>> sorted([1,2,3])
    [1, 2, 3]
    >>> reversed([1,2,3])
    <listreverseiterator object at 0x0000000002AE0898>
    >>> for i in reversed([1,2,3]):print i
    3
    2
    1
    ...
    >>> a = [2,3,1]
    >>> a.sort()
    >>> a
    [1, 2, 3]
    >>> a.reverse()
    >>> a
    [3, 2, 1]
    

    6, __all__

      __all__ = ['echo','company','employee'] 可以放在__init__文件中当使用 from xxx import * 时将导入__all__中指定的模块

    7, str.format(*args**kwargs)

      str.format是格式化字符串的一种方式,用法比较简单直接上代码:该例中{!s}和{!r}指的是分别用str()和repr()处理,函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式

    >>> print 'hello you are smart,{0}{1}'.format('Steven','Daole')
    hello you are smart,StevenDaole
    ...
    >>> print 'hello you are smart,{name}'.format(name='Jack')
    hello you are smart,Jack
    ...
    通过对象属性
    >>>import math
    >>>print '{.pi}'.format(math)
    3.14159265359
    通过下标
    >>>p = [1,2]
    >>>print '{0[0]},{0[1]}'.format(p)
    1,2
    >>> print '{.pi!s}'.format(math)
    3.14159265359
    >>> print '{.pi!r}'.format(math)
    3.141592653589793

      填充常跟对齐一起使用
    ^、<、>分别是居中、左对齐、右对齐,后面带宽度
    :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充

    >>> '{:>8}'.format('189')
    '     189'
    >>> '{:0>8}'.format('189')
    '00000189'
    >>> '{:a>8}'.format('189')
    'aaaaa189'
    

      精度常跟类型f一起使用,其中.2表示长度为2的精度,f表示float类型。b、d、o、x分别是二进制、十进制、八进制、十六进制。

    >>> '{:.2f}'.format(321.33345)
    '321.33'
    >>> '{:b}'.format(17)
    '10001'
    >>> '{:d}'.format(17)
    '17'
    >>> '{:o}'.format(17)
    '21'
    >>> '{:x}'.format(17)
    '11'
    

      用,号还能用来做金额的千位分隔符。

    >>> '{:,}'.format(1234567890)
    '1,234,567,890'
    

    8,python的Template使用指南

      Template无疑是一个好东西,可以将字符串的格式固定下来,重复利用。同时Template也可以让开发人员可以分别考虑字符串的格式和其内容了,无形中减轻了开发人员的压力

    Template中有两个重要的方法:substitute和safe_substitute,这两个方法都可以通过获取参数返回字符串

    >>s=Template(There $a and $b)
    >>print s.subtitute(a='apple',b='banana')
    There apple and banana
    >>print s.safe_substitute(a='apple',b='banbana')
    There apple and banbana
    ...

      还可以通过获取字典直接传递数据,像这样

    >>s=Template(There $a and $b)
    >>d={'a':'apple','b':'banbana'}
    >>print s.substitute(d)
    There apple and banbana
    

      Template可以被继承,它的子类可以进行一些‘个性化'操作...通过修改delimiter字段可以将$字符改变为其他字符,如“#”,不过新的标示符需要符合正则表达式的规范。通过修改idpattern可以修改key的命名规则,比如说规定第一个字符开头必须是a,这对规范命名倒是很有好处。当然,这也是通过正则表示实现的。

    from string import Template
    class MyTemplate(Template):
      delimiter = "#"
      idpattern = "[a][_a-z0-9]*"
    def test():
      s='#aa is not #ab'
      t=MyTemplate(s)
      d={'aa':'apple','ab':'banbana'}
      print t.substitute(d)
    if __name__=='__main__':
      test()

    #result:
    #apple is not banbana

    9, str.rjust() str.ljust() str.zfill()

      这三个函数都有只一个参数,该参数是int型指定输出的字符串长度,他们的效果如下,rjust是向右对齐,ljust是向左对齐,zfill是用0填充

    >>> 'fdsa'.rjust(10)
    '      fdsa'
    >>> 'fdsa'.ljust(10)
    'fdsa      '
    >>> 'fdsa'.zfill(10)
    '000000fdsa'
     
     
    有志者,事竟成!
  • 相关阅读:
    吴裕雄--天生自然ANDROID开发学习:3.3 Handler消息传递机制浅析
    吴裕雄--天生自然ANDROID开发学习:3.2 基于回调的事件处理机制
    吴裕雄--天生自然ANDROID开发学习:3.1.1 基于监听的事件处理机制
    吴裕雄--天生自然ANDROID开发学习:2.6.4 DrawerLayout(官方侧滑菜单)的简单使用
    吴裕雄--天生自然ANDROID开发学习:2.6.3 ViewPager的简单使用
    吴裕雄--天生自然ANDROID开发学习:2.6.2 菜单(Menu)
    吴裕雄--天生自然ANDROID开发学习:2.6.1 PopupWindow(悬浮框)的基本使用
    吴裕雄--天生自然ANDROID开发学习:2.6.0 其他几种常用对话框基本使用
    吴裕雄--天生自然ANDROID开发学习:2.5.9 AlertDialog(对话框)详解
    bzoj 3874: [Ahoi2014&Jsoi2014]宅男计划
  • 原文地址:https://www.cnblogs.com/styier/p/5990452.html
Copyright © 2011-2022 走看看