【流畅的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'

posted on 2021-01-06 17:11  简单的Python  阅读(64)  评论(0编辑  收藏  举报

导航