编程语言
首页 > 编程语言> > python中内置的sequence类型

python中内置的sequence类型

作者:互联网

Sequence类型概述

python中内置的sequence类型可以分为Container Sequences和Flat Sequences

  1. Container Sequences
    1. list
    2. collections.deque
    3. tuple
  2. Flat Sequences
    1. str
    2. bytes
    3. bytearray
    4. array.array
    5. memoryview

Container Sequences 中存放元素的引用,元素可以拥有不同类型。
而Flat Sequences中存放元素的值,元素类型必须一致,并且只能是primitive type比如character、bytes、numbers。

依据sequence是否可变,可将sequence类型分为Mutable Sequences和Immutable Sequences

  1. Mutable Sequences
    1. list
    2. collections.deque
    3. bytearray
    4. array.array
    5. memoryview
  2. Immutable Sequences
    1. str
    2. tuple
    3. bytes

List Comprehension

List Comprehension能帮助我们快速生成一个list类型的数据集合。(它的作用也仅仅是生成一个新列表)

>>> [ord(ch) for ch in 'beautiful']
[98, 101, 97, 117, 116, 105, 102, 117, 108]
>>> [ord(ch) for ch in 'beautiful' if ord(ch)>100]
[101, 117, 116, 105, 102, 117, 108]

Generator Expression

如果希望初始化list之外的sequence类型的数据,我们当然可以先使用list comprehension生成一个list,再将其传入指定类型的constructor中,但是更好的方法是使用Generator Expression。
Generator会一个接一个的产生数据,节省内存,避免一个list存储了所有数据,仅仅用来作为参数传入constructor中。在使用时,只需要将[]换为()

>>> array.array('I',(x**2 for x in range(3)))
array('I', [0, 1, 4])
>>> tuple(ord(ch) for ch in'hello')
(104, 101, 108, 108, 111)
>>> (x+1 for x in range(4))
<generator object <genexpr> at 0x7f97a851c6d0>

当函数只有一个参数时,作为参数的Generator Expression可以不加括号,只需函数本身的括号即可

tuple

由于tuple不可变的特性,其可以作为根据位置存储的属性集合。
与之相对的,tuple的子类collections.namedtuple可以根据属性名存储。

namedtuple将属性field存储到类变量中,而不是存储到实例变量__dict__中,故与tuple所占内存几乎一致。

>>> Student = collections.namedtuple('student','name age')
>>> Student
<class '__main__.student'>
>>> tom = Student('tom',18)
>>> tom
student(name='tom', age=18)
>>> jerry  = Student('jerry',age=18)
>>> jerry
student(name='jerry', age=18)
>>> jerry.name
'jerry'
>>> jerry[0]
'jerry'

namedtuple的常用属性和方法

  1. _fields,返回一个元组,元组中包含类的fields (类属性)
  2. _make(),从一个iterable实例化一个namedtuple(类方法)
  3. _asdict(),返回一个ict,用于优美的展示一个namedtuple对象
>>> Student._fields
('name', 'age')
>>> timmy = Student._make(('timmy',20))
>>> timmy._asdict()
{'name': 'timmy', 'age': 20}
>>> timmy_dict = timmy._asdict()
>>> type(timmy_dict)
<class 'dict'>

标签:内置,sequence,python,list,jerry,timmy,ch,Sequences,array
来源: https://www.cnblogs.com/pitaya01/p/16364668.html