python中内置的sequence类型

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

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

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

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))
 at 0x7f97a851c6d0>

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

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

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

>>> Student = collections.namedtuple('student','name age')
>>> 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的常用属性和方法

>>> Student._fields
('name', 'age')
>>> timmy = Student._make(('timmy',20))
>>> timmy._asdict()
{'name': 'timmy', 'age': 20}
>>> timmy_dict = timmy._asdict()
>>> type(timmy_dict)

+和可以用来初始化一个sequence,+或者两侧的操作数不会被改变,只会返回一个新的sequence。但两侧的操作数要求为相同类型。

>>> [1,2,3]+[4,5]
[1, 2, 3, 4, 5]
>>> [1,2,3]+(4,5)
Traceback (most recent call last):
  File "", line 1, in
TypeError: can only concatenate list (not "tuple") to list
>>> [1,2,3]*3
[1, 2, 3, 1, 2, 3, 1, 2, 3]

值得注意的是,如果sequence是一个container sequence,也就是说包含的是元素的引用,那么在使用*时,复制的是同一个元素的引用。

>>> a = [['_']]*3
>>> a[0][0]='+'
>>> a
[['+'], ['+'], ['+']]

Original: https://www.cnblogs.com/pitaya01/p/16364668.html
Author: somelovelanguage
Title: python中内置的sequence类型

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/603604/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球