欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python基础——day03

程序员文章站 2022-04-28 10:28:28
...

一.可变字符串_io.StringIO

ptyhon中字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,只能常见新的字符串对象,可以使用io.StringIO( )

>>> a="answer"
>>> s=io.StringIO(a)
>>> s.getvalue()
'answer'
>>> s.write('q')
1
>>> s.getvalue()
'qnswer'
>>> s.seek(3)
3
>>> s.write('x')
1
>>> s.getvalue()
'qnsxer'

二.运算符总结_位操作符_优先级问题
Python基础——day03

>>> a=5
>>> 3<a<10
True

>>> a=5
>>> 3<a<10
True
>>> a=0b1101
>>> b=0b1001
>>> c=a|b
>>> c
13
>>> bin(c)
'0b1101'
>>> bin(c^b)
'0b100'
>>> bin(a^b)
'0b100'
>>> a=2
>>> a<<1
4
>>> a>>1
1
>>> a
2
>>> a>>2
0
>>> a<<2
8
>>>

三.复合赋值运算符
Python基础——day03
注意:与C 和JAVA不一样,Python不支持自增(++)和自减(- -)
四.运算符优先级问题
实际使用中,记住如下简单的规则即可,复杂的表达式一定要使用小括号组织。
1.乘除优先加减
2.位运算和算术运算>比较运算符>赋值运算符>逻辑运算符
五(第3章 序列)列表_特点_内存分析
1.序列
序列是一种数据存储方式,用来存储一系列的数据。在内存中,序列就是一块用来存放 多个值的连续的内存空间;python 中常用的序列结构有: 字符串、列表、元组、字典、集合
2.内存分析:
对象的id放在序列中(序列存储的是地址不是数据),最后序列的第一个id给变量a
Python基础——day03
3.
列表简介
列表:用于存储任意数目、任意类型的数据集合。
列表是内置可变序列,是包含多个元素的有序连续的内存空间。列表定义的标准语法格式: a = [10,20,30,40]
列表中的元素可以各不相同,可以是任意类型。比如: a = [10,20,‘abc’,True]
列表对象的常用方法:
Python基础——day03
字符串和列表都是序列类型,一个字符串是一个字符序列,一个列表是任何元素的序列。
六.创建列表的4种方式_推导式创建列表
1.创建列表
基本语法创建

>>> a=[10,'aas','True',True]
>>> a
[10, 'aas', 'True', True]

2.list()创建

>>> a=list()
>>> a
[]
>>> b=[]#相当于b=list()
>>> b
[]
>>> a=list(range(5))
>>> a
[0, 1, 2, 3, 4]
>>> a=list("QQ,small")
>>> a
['Q', 'Q', ',', 's', 'm', 'a', 'l', 'l']
>>>

3.range()创建整数列表
(1)语法格式为: range([start,] end [,step])
start 参数:可选,表示起始数字。默认是 0
end参数:必选,表示结尾数字。
step参数:可选,表示步长,默认为1
(2)包头不包尾
(3)range()返回的是一个range 对象,而不是列表。我们需要通过list()方法将其转换成列表对象。

>>> range(0,5)
range(0, 5)
>>> list(range(0,5))
[0, 1, 2, 3, 4]
>>> list(range(3,6,2))
[3, 5]
>>> list(range(3,-10,-1))
[3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> list(range(20,1,-1))
[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
>>>

(4)推导式生成列表

>>> a=[x*2 for x in range(5)]#默认从0开始
>>> a
[0, 2, 4, 6, 8]

七.列表_元素的5种添加方式_效率问题
1.列表元素的增加
当列表增加和删除元素时,列表会自动进行内存管理,大大减少了程序员的负担。但这个特点涉及列表元素的大量移动,效率较低。除非必要,我们一般只在列表的尾部添加元素或删除元素,这会大大提高列表的操作效率。
(1)append()方法
原地修改列表对象,是真正的列表尾部添加新的元素,速度最快,推荐使用

>>> a.append(80)
>>> a
[20, 0, 80]

(2)+运算符操作
创建新的列表对象;将原列表的元素和新列表的元素依次复制到新的列表对象中。这样,会涉及大量的复制操作,对于操作大量元素不建议使用。

>>> a=[20,0]
>>> id(a)
1555876370184
>>> a+[80]
[20, 0, 80]
>>> id(a)
1555876370184

(3)extend()方法
将目标列表的所有元素加到本列表的尾部,不创建新的列表对象;

>>> id(a)
1555876370184
>>> a.extend([20])
>>> a
[20, 0, 20]
>>> id(a)
1555876370184

(4)insert()插入元素
使用insert()方法可以将指定的元素插入到列表对象的任意制定位置。这样会让插入位置后面所有的元素进行移动,会影响处理速度。涉及大量元素时,尽量避免使用。类似发生这种移动的函数还有:remove()、pop()、del(),它们在删除非尾部元素时也会发生操作位置后面元素的移动。

>>> a=[20,2]
>>> a.insert(1,3)
>>> a
[20, 3, 2]
>>>

(5)乘法扩展

生成一个新列表,新列表元素是原列表元素的多次重复

>>> a
[20, 3, 2]
>>> a*3
[20, 3, 2, 20, 3, 2, 20, 3, 2]

*八.列表_元素删除的三种方式_删除本质是数组元素拷贝
1.del()
删除列表指定位置的元素。
2.pop()
pop()删除并返回指定位置元素,如果未指定位置则默认操作列表最后一个元素
3.remove()
删除首次出现的指定元素,若不存在该元素抛出异常。

>>> a=[20,30,40,50,45,0]
>>> del(a[2])
>>> a
[20, 30, 50, 45, 0]
>>> a.pop()
0
>>> a
[20, 30, 50, 45]
>>> a.pop(2)
50
>>> a
[20, 30, 45]
>>> a.remove(30)
>>> a
[20, 45]
>>> a.remove(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
>>> a
[20, 45]
>>>

九.列表_元素的访问_元素出现次数统计_成员资格判断
1.索引直接访问元素
索引的区间在[0, 列表长度-1]这个范围。超过这个范围则会抛出异常。
2.index()获得指定元素在列表中首次出现的索引
语法是: index(value,[start,[end]])。其中, start 和end指定了搜索的范围。

>>> a=[1,2,3,4,5,6,7,8,9]
>>> a.index(3)
2
>>> a.index(9,1,5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 9 is not in list
>>> a.index(2,0,5)
1

3.count()获得指定元素在列表中出现的次数

>>> a.count(1)
1

4.len()返回列表的长度

>>> len(a)
9

4.成员资格判断
in关键字来判断是否含有指定元素,返回的是True或者False

>>> a=[2,3,4,5,6,70]
>>> 2 in a
True
>>> 10 in a
False

十.列表_切片slice操作
切片 slice 操作可以让我们快速提取子列表或修改。标准格式为: [起始偏移量start:终止偏移量end[:步长 step]]
Python基础——day03
Python基础——day03
切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围,也不会报错。起始偏移量小于0则会当做 0,终止偏移量大于“长度-1”会被当成”长度-1”
**十一.列表_排序_reversed逆序_max_min_sum
1.修改原列表,不建新列表的排序

>>> a=[20,12,43,23]
>>> a.sort()
>>> a
[12, 20, 23, 43]

2.创建新列表的排序
内置函数sorted()进行排序,这个方法返回新列表,不对原列表做修改。

>>> a=[90,87,65,23,12]
>>> b=sorted(a)
>>> b
[12, 23, 65, 87, 90]
>>> id(a)
1555876312968
>>> id(b)
1555876463368

3.reversed()返回迭代器
内置函数reversed()也支持进行逆序排列,与列表对象 reverse()方法不同的是,内置函数 reversed()不对原列表做任何修改,只是返回一个逆序排列的迭代器对象。

>>> c=reversed(a)
>>> list(c)
[12, 23, 65, 87, 90]
>>> c
<list_reverseiterator object at 0x0000016A417822E8>
>>> list(c)#我们使用 list(c)进行输出,发现只能使用一次。第一次输出了元素,第二次为空。那是因为迭代对象在第一次时已经遍历结束了,第二次不能再使用。
[]

4.列表相关的其他内置函数
(1)max(),min(),返回最大值,最小值
(2)sum(),计算数值型列表的总和

十一.列表_二维列表_表格数据的存储和读取
1.二维列表
一维列表可以帮助我们存储一维、线性的数据。
二维列表可以帮助我们存储二维、表格的数据。例如下表的数据:
Python基础——day03

>>> a=[
... ['A','3000','Shanghai'],
... ['B','3000','Beijing'],
... ['C','20000','Shanghai'],
... ]
>>> a
[['A', '3000', 'Shanghai'], ['B', '3000', 'Beijing'], ['C', '20000', 'Shang
hai']]

内部结构图
Python基础——day03
十二.元组_特点_创建的两种方式_tuple()要点
1.元组tuple
元组是不可变序列,不能修改元组中的元素,只有创建和删除,访问和计数的操作
元组支持如下操作:
(1) 索引访问
(2) 切片操作
(3) 连接操作
(4) 成员关系操作
(5) 比较运算操作
(6) 计数:元组长度len()、最大值 max()、最小值 min()、求和sum()等。
2.元组的创建
(),()可省略

>>> a=(20,30,34)
>>> a
(20, 30, 34)
>>> a=20,30,50
>>> a
(20, 30, 50)

如果元组只有一个元素,则后面必须加逗号,否则解释器会把(1)解释为1,(1,)解释为元组

>>> a=(1)
>>> a
1
>>> a=(1,)
>>> a
(1,)

2.通过tuple()创建元组
tuple(可迭代对象)

>>> a=tuple()
>>> a
()
>>> a=tuple("abc")
>>> a
('a', 'b', 'c')
>>> a=tuple([a,b,c])
>>> a
(('a', 'b', 'c'), [12, 23, 65, 87, 90], <list_reverseiterator object at 0x0
000016A417822E8>)
>>> a=tuple(range(5))
>>> a
(0, 1, 2, 3, 4)
>>>

十三.元组_元素访问_计数方法_切片操作_成员资格判断_zip()
1.元组的元素不可更改
2.对元组的排序只能使用内置函数sorted(tupleObj),生成的是新的列表对象;

>>> a=(9,7,6,5,4)
>>> a
(9, 7, 6, 5, 4)
>>> sorted(a)
[4, 5, 6, 7, 9]

3.zip()
将多个列表对应位置的元素组合成为元组,并返回这个zip对象
多个列表对象zip,返回的列表元素是元组

>>> a=[10,20,30]
>>> b=[12,13,14]
>>> c=[23,24,25]
>>> zip(a,b,c)
<zip object at 0x0000016A41741BC8>
>>> list(zip(a,b,c))
[(10, 12, 23), (20, 13, 24), (30, 14, 25)]

十四.元组_生成器推导式创建元组_总结
1.
从形式上看,生成器推导式与列表推导式类似,只是生成器推导式使用小括号。列表推导式直接生成列表对象,生成器推导式生成的不是列表也不是元组,而是一个生成器对象。
我们可以通过生成器对象,转化成列表或者元组。也可以使用生成器对象的__next__() 方法进行遍历,或者直接作为迭代器对象来使用。不管什么方式使用,元素访问结束后,如果需要重新访问其中的元素,必须重新创建该生成器对象。

>>> a=(x*2 for x in range(5))
>>> a
<generator object <genexpr> at 0x0000016A4171D318>
>>> tuple(a)
(0, 2, 4, 6, 8)
>>> tuple(a)
()
>>> a=(x*2 for x in range(5))
>>> a
<generator object <genexpr> at 0x0000016A4171D408>
>>> a.__next__()#指针指向下一个,读取
0
>>> a.__next__()#注意是两个'_'
2
>>> a.__next__()
4
>>> a.__next__()
6
>>> a.__next__()
8
>>> a.__next__()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>>

元组是不可变序列
元组的访问和处理速度比列表快
因为元组是不可变序列,可以作为字典的建;而列表不能;