python中内置的sequence类型
作者:互联网
Sequence类型概述
python中内置的sequence类型可以分为Container Sequences和Flat Sequences
- Container Sequences
- list
- collections.deque
- tuple
- Flat Sequences
- str
- bytes
- bytearray
- array.array
- memoryview
Container Sequences 中存放元素的引用,元素可以拥有不同类型。
而Flat Sequences中存放元素的值,元素类型必须一致,并且只能是primitive type比如character、bytes、numbers。
依据sequence是否可变,可将sequence类型分为Mutable Sequences和Immutable Sequences
- Mutable Sequences
- list
- collections.deque
- bytearray
- array.array
- memoryview
- Immutable Sequences
- str
- tuple
- 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的常用属性和方法
- _fields,返回一个元组,元组中包含类的fields (类属性)
- _make(),从一个iterable实例化一个namedtuple(类方法)
- _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