zoukankan      html  css  js  c++  java
  • 【流畅的Python】笔记二:

    二、数据结构

    1.容器序列:存放他们所包含任意类型的对象的引用。

    list、tuple、collections.deque能放不同类型的数据。

    2.扁平序列:存放的是值,不是引用。

    str、bytes、bytearray、memoryview、array.array 仅能容纳一种类型。

    此类序列其实是一段连续的内存控件,只能存放字符、字节和数值。

    3.可变序列:

    list、bytearray、array.array、collections.deque、memoryview

    4.不可变序列:

    tuple、str、bytes

    =====================================================

    对于列表推导式:生成列表

    symbols = ‘$%^&*’

    codes = [ord(symbol) for symbol in symbols]

    通常原则是:只用来创建新的列表,并尽量保持简短。(小技巧:python会忽略{}[]()中的换行。)超过多行就需要用for循环来重写。

    列表推导不再有变量泄露的问题,也即列表推导式中的循环变量不会影响推导式外的同名变量,他们仅作用于自己的局部作用域。

    colors = ['black','white']
    sizes = ['S','M','L']
    tshirts = [(color,size) for color in colors for size in sizes]

    =====================================================

    生成器表达式:用来初始化元组、数组及其他序列类型。

             生成器表达式遵循了迭代器协议,可以逐个产出元素,节省内存。(列表生推导式也能产生成,但首先是建立列表,然后再把列表传递到某个数据结构中,浪费内存。)

    symbols = '#$%^&&'
    tuple(ord(symbol) for symbol in symbols)

    import array

    array.array('I',(ord(symbol) for symbol in symbols))

    colors = ['black','white']
    sizes = ['S','M','L']

    for tshirt in ('%s %s' %(c,s) for c in colors for s in sizes):
         print(tshirt)

    |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    元组:(每个元素都存放了一个字段的数据,以及该字段的位置)

    lax_coordinates = (33.123,-118.1234)
    city,year,pop,chg,area = ('Tokyo',2003,32450,0.66,8014)
    traveler_ids = [('USA','312312412'),('BRA','34923459'),('ESP','59881230')]
    for passport in sorted(traveler_ids):
         print('%s/%s'%passport)

    for country,_ in traveler_ids:
         print(country)

        元组拆包,使用“_” 占位符,“*”:表示的是忽略多余的元素。

    >>> latitude,longitude = lax_coordinates
    >>> latitude
    33.123
    >>> longitude
    -118.1234
    >>> divmod(20,8)
    (2, 4)
    >>> t = (20,8)
    >>> divmod(*t)
    (2, 4)
    >>> quotient,remainder = divmod(*t)
    >>> quotient,remainder
    (2, 4)

        用*args 来获取不定量的参数。

    >>> a, b, *rest = range(5)

    >>> a, b, rest

    (0, 1, [2, 3, 4])

    >>> a, b, *rest = range(3)

    >>> a, b, rest

    (0, 1, [2])

    >>> a, b, *rest = range(2)

    >>> a, b, rest

    (0, 1, [])

    >>> *head, b, c, d = range(5)

    >>> head, b, c, d

    ([0, 1], 2, 3, 4)

         具名元组:collections.namedtuple 用来构建一个带字段名的元组和一个有名字的类。需要两个参数,1是类名,2是各个字段的名字

    >>>Card = collections.namedtuple(‘Card’,[‘rank’,’suit’])

    >>> card_a = Card('A','square')
    >>> card_a
    Card(rank='A', suit='square')
    >>> card_a.rank
    'A'
    >>> card_a.suit
    'square'
    >>> card_a[0]
    'A'

  • 相关阅读:
    对于动态建立索引的禁止方法
    在 Lotus Notes 中设置邮件定时发送的方法及代理功能介绍
    Lotus Domino中使用Xpage技术打造通讯录
    利用 LotusScript 实现 Microsoft Word 文档在公文流转中的公文留痕
    Ext.Template模板进阶
    Ext.template的使用
    Domino中Xpage和自定义控件的使用
    利用 LotusScript 灵活操作 Lotus Notes 富文本域
    ExtJs2.0学习系列(11)Ext.XTemplate
    利用 XForms 和 ODF 实现交互式办公文档
  • 原文地址:https://www.cnblogs.com/tendercool/p/14242181.html
Copyright © 2011-2022 走看看