内置序列类型概览

按照可否存储不同数据类型来分,可以分为容序列和扁平序列。

容器序列

list, tuple, collections.deque 这些序列类型可以容纳不同类型的数据。

扁平序列

str, bytes, bytearray, memoryview, array.array 这类序列只能容纳一种类型的数据

按照是否可变可以分为可变序列和不可变序列。

可变序列

list, bytesarray, array.array, collections.deque, memoryview

不可变序列

tuple, str, bytes

列表推导式和生成器表达式

列表推导是构建列表的快捷方式。而生成器表达式则可以用来创建其他的任何序列。

善于使用列表推导式1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21from pprint import pprint

a=[1,2,3]

b=["a","b","c"]

c=[(d,e) for d,e in zip(a,b)]

print(c)

g=[(i,j) for i in a for j in b]

pprint(g)

"""注意比较c,g两个列表推导式的区别"""

h=[i+i for i in range(10) if i % 2==0]

print(h)

#生成器表达式

#把列表推导式的中括号改为圆括号就得到了生成器表达式

a=(i for i in range(10))

print(a)

print(a.__next__())

print(a.__next__())

print(a.__next__())

print(a.__next__())

print(a.__next__())

#当生成器表达式作为函数调用过程中的唯一

#参数的时候不需要再用圆括号括起来

输出:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17[(1, 'a'), (2, 'b'), (3, 'c')]

[(1, 'a'),

(1, 'b'),

(1, 'c'),

(2, 'a'),

(2, 'b'),

(2, 'c'),

(3, 'a'),

(3, 'b'),

(3, 'c')]

[0, 4, 8, 12, 16]

at 0x7f28a9f3fc50>

0

1

2

3

4

元组不仅仅是不可变列表

如果仅仅是把元组理解为不可变的列表,那其他的信息——他所含有的元素的总数和他们的位置似乎就变得可有可无了。但是这样并没有发挥元组本来所有的力量。元组的特点就是它所记录数据的数量和位置。

元组拆包1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23#拆包

a=(1,2,3)

n1,n2,n3=a

print(n1)

print(n2)

print(n3)

#用*处理剩下的元素

b=("aaa","bbb","ccc","ddd")

b1,b2,*rest=b

print(b1)

print(b2)

print(rest)

#变量的值

m=1

n=2

print(m,n)

m,n=n,m

print(m,n)

#用*运算符把一个可迭代对象拆开作为函数的参数

c=(5,6)

def myadd(a,b):

return a+b

print(myadd(*c))

输出:

1

2

3

4

5

6

7

8

91

2

3

aaa

bbb

['ccc', 'ddd']

1 2

2 1

11

具名元组

collctions.namedtuple()是一个工厂函数,它可以用来构建一个带字段名的元组和一个有名字的类。

基本使用1

2

3

4

5

6

7from collections import namedtuple

City=namedtuple("City",["name","country","population"])

Beijing=City("Beijing","China",100)

Tokyo=City("Tokyo","Japan",96)

print(Beijing.country)

print(Tokyo.population)

print(Tokyo[1])

输出:

1

2

3China

96

Japan

创建一个具名元组需要两个参数,一个是类名,另一个是类的各个字段的名字。后者可以是由数个字符串组成的可迭代对象,或者是由空格分隔开的字段名组成的字符串。存放在对应字段里的数据要以一串参数的形式传入到构造函数中。可以通过字段名或者位置来获取一个字段的信息。

具名元组的属性和方法1

2

3

4

5

6print(City._fields)#获得所有的字段名

cityMsg=("Shanghai","China",99)

shanghai=City._make(cityMsg)#创建对象的一种方式,和City(*cityMsg)一样

print(shanghai._asdict())

for key,value in shanghai._asdict().items():

print(key,":",value)

输出:

1

2

3

4

5('name', 'country', 'population')

OrderedDict([('name', 'Shanghai'), ('country', 'China'), ('population', 99)])

name : Shanghai

country : China

population : 99

序列排序

在这里我们用list这一个序列来作为例子讲解python中序列的排序,其他的可排序序列和list是一致。这里主要讨论list.sort()和sorted()。前者是对列表就地排序,它会返回None,将list改变为有序的list.而后者则不会改变传入的list,只是复制了一个新的list,将新的list调整顺序之后返回。无论是list.sort()还是sorted()都有两个可选的关键字参数:key,reverse。他们分别决定排序的标准和升降序。

用bisect来管理已排序的序列

bisect模块包含两个主要的函数,bisect和insort两个函数都是利用二分查找算法来在有序序列中查找或插入元素。

1

2

3

4

5

6

7

8

9

10import bisect

a=[1,2,38,85]

b=bisect.bisect(a,39)

#返回39插入已升序排序序列a中后仍然满足升序规则的下标值

a.insert(b,39)

print(a)

#上面两步操作可以直接用下面的替代

c=[1,2,38,85]

d=bisect.insort(c,39)#直接插入并且保持升序

print(c)

输出:

1

2[1, 2, 38, 39, 85]

[1, 2, 38, 39, 85]

当列表不是首选时

有时候因为列表实在太方便了,所以python程序员会过度使用它。但是,如果你只需要处理数字列表的话,数组可能是个更好的选择,下面我们就来探讨一下可以替换列表的数据结构。

数组

数组(array)可以紧凑盛放基本的变量,如:字符,整数,浮点数。他是一个序列类型,在表现上和list非常想,但是它存储的数据类型受到了限制,它只能存储相同的基本类型的数据。所存储的数据的类型由array对象初始化时传入的typecode指定。以下的为所支持的typecode:

Typecode

C Type

Python Type

Minimum size in bytes

b

signed char

int

1

B

unsigned char

int

1

u

Py_UNICODE

Unicode character

2

h

signed short

int

2

H

unsigned char

int

2

i

signed int

int

2

I

unsigned int

int

2

l

signed long

int

4

L

unsigned long

int

4

q

signed long long

int

8

Q

unsigned long long

int

8

f

float

float

4

d

double

float

8

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15from array import array

from random import random

a1=array('q',(i for i in range(100)))

#其基本上和list具备相同的行为

print(a1.typecode)

print(a1[2])

print(a1.count(55))

print(a1.pop())

a3=array('d',(random() for i in range(10**3)))

with open("float.bin","wb") as f:

a3.tofile(f)

a2=array("d")

with open("float.bin","rb") as f2:

a2.fromfile(f2,10**3)

print(a2[3])

内存视图

memoryview是一个内置类,他能让用户在不复制内容的情况下操作同一个数组的不同切片,在数据结构之间共享内存。

1

2

3

4

5

6

7

8from array import array

a=array('h',[1,2,3])

print(a)

m1=memoryview(a)

print(len((m1)))

m1[0]=15

print(m1)

print(a)

输出:

1

2

3

4array('h', [1, 2, 3])

3

array('h', [15, 2, 3])

双向队列和其他形式的队列1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19from collections import deque

dq=deque(range(10),maxlen=10)

print(dq)

dq.rotate(3)

print(dq)

dq.rotate(-3)

print(dq)

dq.append(100)

print(dq)

dq.appendleft(-100)

print(dq)

dq.extend([111,222,333])

print(dq)

dq.extendleft([-111,-222,-333])

print(dq)

print(dq.pop())

print(dq)

print(dq.popleft())

print(dq)

输出:

1

2

3

4

5

6

7

8

9

10

11deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)

deque([7, 8, 9, 0, 1, 2, 3, 4, 5, 6], maxlen=10)

deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)

deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 100], maxlen=10)

deque([-100, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)

deque([3, 4, 5, 6, 7, 8, 9, 111, 222, 333], maxlen=10)

deque([-333, -222, -111, 3, 4, 5, 6, 7, 8, 9], maxlen=10)

9

deque([-333, -222, -111, 3, 4, 5, 6, 7, 8], maxlen=10)

-333

deque([-222, -111, 3, 4, 5, 6, 7, 8], maxlen=10)

python序列类型-Python内置的序列类型相关推荐

  1. Python数字类型及字符串类型的内置方法 ##

    数字类型及字符串类型的内置方法 数字类型 数字类型有哪些? 整型和浮点型 有哪些运算符? 平时用的加减乘除.整除.模运算.幂运算,比较运算等 他们的属性? 数字类型没有有序,无序一说.换言之,不存在索 ...

  2. python的四种内置数字类型_浅析Python数字类型和字符串类型的内置方法

    一.数字类型内置方法 1.1 整型的内置方法 作用 描述年龄.号码.id号 定义方式 x = 10 x = int('10') x = int(10.1) x = int('10.1') # 报错 内 ...

  3. boost::python模块实现使用内置 python 数据类型创建 ndarrays 的示例,并提取成员变量的类型和值测试程序

    boost::python模块实现使用内置 python 数据类型创建 ndarrays 的示例,并提取成员变量的类型和值测试程序 实现功能 C++实现代码 实现功能 boost::python模块实 ...

  4. python内置类型方法_浅析Python数字类型和字符串类型的内置方法

    一.数字类型内置方法 1.1 整型的内置方法 作用 描述年龄.号码.id号 定义方式 x = 10 x = int('10') x = int(10.1) x = int('10.1') # 报错 内 ...

  5. 全面讲解Python列表数组(三)列表数组类型的内置函数方法

    列表数组类型的内置函数方法 这里有一个列表 list1[1,2,3,4,1,5,6,7,8,9] 一, count() list1.count(1) 2 作用是计算列表一个元素出现的次数; 二. in ...

  6. python文档整理,Python官方文档内置函数整理Word版

    <Python官方文档内置函数整理Word版>由会员分享,可在线阅读,更多相关<Python官方文档内置函数整理Word版(6页珍藏版)>请在人人文库网上搜索. 1.传播优秀W ...

  7. 【Python养成】常用内置函数 — 2(详解25个内置函数)

    图片来自互联网 文章目录 前言 二.内置函数详解 1.函数:chr(x) 2.函数:dir([obj]) 3.函数:divmod(x,y) 4.函数:enumerate(sequence, [star ...

  8. Python标准库:内置函数dict(mapping, **kwarg)

    Python标准库:内置函数dict(mapping, **kwarg) 本函数是从一个映射函数对象构造一个新字典. 与dict(**kwarg)函数不一样的地方是參数输入是一个映射类型的函数对象,比 ...

  9. Python中常用的内置方法

    Python中常用的内置方法: 比较大小.求和 如下所示: 代码块: #枚举:返回索引值和对应的value值for i,v in enumerate('westos'):print(i,v)#zips ...

  10. Go语言内置的基础类型

    目录 1. 布尔类型 3. 浮点型 4. 复数类型 字符串遍历 字符类型 Go语言内置的基础类型 1. 布尔类型 关键字bool,可赋值为预定义的true和false,如:var v1 bool 布尔 ...

最新文章

  1. php接口调用教程,php接口调用
  2. Deseq的理论基础
  3. 在dreamweaver mx中它只能对html文件可以进行编辑,【职称计算机考试网页制作历年试题及答案二】- 环球网校...
  4. 停止Java线程,小心interrupt()方法
  5. 技术实践第二期|Flutter异常捕获
  6. c++语言中的循环语句有,C++语言中的循环语句
  7. 日期推算处理.sql
  8. 我们为什么要学习 Python、TypeScript 与 Go?
  9. arcore 示例_Android增强现实– Android ARCore示例
  10. 用js写出水仙花数_JavaScript求取水仙花数
  11. 外接显示器屏幕亮度调节
  12. 推荐系统序列化建模总结
  13. Spring Boot 菜鸟教程 12 EasyPoi导出Excel下载
  14. 将一个整数分解为质数的乘积的实现方式
  15. 甲骨文高管薪酬去年骤降 董事长埃利森少拿35%
  16. 计算机应用标准化考场,标准化考场建设的方案.doc
  17. matlab如何实现信道衰落,Matlab下多径衰落信道的仿真
  18. camera模组 ------- super Good
  19. Android HIDL学习 - HelloWord入门(整理1)
  20. 设计老虎为主题icon

热门文章

  1. kafka单节点部署无法访问问题解决
  2. php 详解spl_autoload_register()函数
  3. (转)开发心得分享:10年编程无师自通
  4. hbase安装,以及安装前置hadoop(单节点)
  5. 阿里云下Linux服务器安装Redis
  6. 【转载】变量的存储类别
  7. jquery 向上滚动【四】个人认为好一些,哈
  8. CHOJ# 在线编译及评判系统(OnlineJudge)2.0 Beta2
  9. python 为什么每次代码运行时间不同-python – 气流在同一个dag的不同时间运行任......
  10. python打开一个文件夹下所有txt文件-python读取一个目录下所有txt里面的内容方法...