ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python中内置的sequence类型

2022-06-10 21:00:18  阅读:180  来源: 互联网

标签:内置 sequence python list jerry timmy ch Sequences array


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有