Python基础(第三节)

可变字符串

可以使用io.StringIO对象或array模块
定义可变字符串

>>> import io
>>> s = "wyj"
>>> sio = io.StringIO(s)
>>> sio
<_io.StringIO object at 0x000001DF6CB661F8>

获得可变字符串的值以及修改

>>> sio.getvalue()    #显示可变字符串
'wyj'
>>> sio.seek(2)    #使指针指向第2位
2
>>> sio.write('jj')    #修改其中的值
2
>>> sio.getvalue()
'wyjj'

位操作

1、| :按位或
2、^ :按位异或
3、& :按位与

4、<< :左移;左移1位相当于乘2
5、>> :右移;右移1位相当于除以2
PS:做乘2、除以2操作更快

运算符优先级问题

1、乘除优先加减
2、位运算和算术运算 > 比较运算符 > 赋值运算符 > 逻辑运算符
PS:复杂表达式一定要由小括号组成

序列

1、序列是一块存放多个值的连续的内存空间
2、序列存储的是地址,而不是对象的值,是通过存储的地址去找到对象

3、Python中常用的序列结构
字符串、列表、元组、字典、集合

列表

1、用于存储任意数目、任意类型的数据集合
2、Python的列表大小可变,可以随时增大或减小
3、列表与字符串的用法几乎一模一样

列表的创建
1、基本语法[]创建

>>> a = [10,20,'wyj']
>>> a = []
>>> a.append(20)
>>> a
[20]

2、list()创建
使用list可以将任何可迭代的数据转化成列表

>>> a = list()
>>> a
[]
>>> a = list("wyj")
>>> a
['w', 'y', 'j']
>>> a = list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

3、range()创建整数列表
语法格式: range([start,]end[,step])
PS:[]代表“可选的”,start默认为0、步长默认为1

>>> list(range(15,1,-2))
[15, 13, 11, 9, 7, 5, 3]

PS:只能创建到end-1

4、推导式生成列表

>>> a = [x*2 for x in range(5)]    #循环创建多个元素
>>> a
[0, 2, 4, 6, 8]
>>> a = [x*2 for x in range(100) if x % 9 == 0]    #通过if过滤元素
>>> a
[0, 18, 36, 54, 72, 90, 108, 126, 144, 162, 180, 198]

列表元素的增加
PS:尽量减少中间的列表的增加或删除,否则会导致列表元素的大量移动,效率较低

1、append()
原地修改列表对象,尾部添加新的元素,速度最快

>>> a = [1,2,3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]

2、+运算符
并不是真正地在尾部添加元素,而是创建新的列表,将原列表的元素和新列表的元素一次赋值到新的列表对象中。这样会涉及大量的赋值操作,对于操作大量元素不建议使用

3、entend()方法
将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的列表对象

>>> a = [1,2,3]
>>> a.extend([4,5,6])
>>> a
[1, 2, 3, 4, 5, 6]

4、insert()插入元素
可以将指定元素插入到列表对象的任意指定位置,会让后面的所有元素进行移动,影响处理速度;涉及大量元素时应避免使用

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

5、乘法扩展
生成新列表,使原列表的元素多次重复

>>> a = [1,2,3]
>>> b = a * 3
>>> b
[1, 2, 3, 1, 2, 3, 1, 2, 3]

列表元素的删除

1、del
删除列表指定位置元素,本质是数组元素的拷贝

>>> a = [1,2,3]
>>> del a[1]
>>> a
[1, 3]

2、pop()方法
删除并返回指定位置元素,如果未指定位置,则默认删除并返回最后一位

>>> a = [1,2,3,4]
>>> b = a.pop()
>>> a
[1, 2, 3]
>>> b
4

3、remove()
删除首次出现的指定元素,如果元素不存在则抛出异常

>>> a = ["a","b","c","a"]
>>> a.remove("a")
>>> a
['b', 'c', 'a']

列表元素的访问和计数

1、通过索引访问 即[]

2、index()
获取指定元素首次出现的索引位置,语法是:index(value,[start,[end]])

3、count()
返回指定元素出现次数

成员资格判断
判断是否存在指定的元素
1、count()
2、用in判断是否存在(推荐)

>>> a = [1,2,3,4,5]
>>> 6 in a
False

切片操作(与字符串操作一样,见第二节)
标准格式:[start:end[:step]]

列表排序

1、sort():默认为升序排列
列表地址不变

>>> a = [1,3,4,2,5,6,3,5]    #升序排列
>>> a.sort()
>>> a
[1, 2, 3, 3, 4, 5, 5, 6]
>>> a.sort(reverse = True)    #降序排列
>>> a
[6, 5, 5, 4, 3, 3, 2, 1]
>>> import random    #乱序排列
>>> random.shuffle(a)
>>> a
[1, 6, 3, 3, 5, 5, 4, 2]

PS:sort()无返回值,只是改变x的排序

2、新建列表的排序
sorted():用法与.sort()有差异

x = [1,3,2]
print(sorted(x))

运行结果为:
[1, 2, 3]

PS:sorted()有返回值,返回值就是排好序的

3、reversed() 返回迭代器
reversed()不对原列表做修改,只返回一个逆序排列的迭代器对象

>>> a = [1,3,5,2,4,6]
>>> c = reversed(a)
>>> c
<list_reverseiterator object at 0x000001DF6CBF93C8>
>>> list(c)
[6, 4, 2, 5, 3, 1]

PS:迭代器是指针走的过程,只能用一次

关于列表的其他函数
max()
min()
sum():对数值型列表求和,对非数值型列表报错

多维列表
一维列表存储一维、线性的数据
二维列表存储二维、表格的数据

二维列表

>> a = [
...     ['老大','19','2000'],
...     ['老二','20','3000'],
...     ['老三','21','3000'],
...     ]
>>> a[0][2]
2000

二维列表的遍历

a = [
        ['老大','19','2000'],
        ['老二','20','3000'],
        ['老三','21','3000'],
    ]
for m in range(3):
    for n in range(3):
        print(a[m][n],end="\t")
    print()
    
'''
a = [
        ['老大','19','2000'],
        ['老二','20','3000'],
        ['老三','21','3000'],
    ]
for m in range(3):
    for n in range(3):
        print(a[m][n],end="\t")
    print()

元组tuple

列表是可变序列;元组是不可变序列,不能修改元组中的元素。因此元组没有增加、修改删除元素相关的方法

元组的创建
1、通过()创建元组,()可以省略
例:a = (1,2,3) 或 a = 1,2,3
PS:如果元组只有一个元素,则必须加逗号,否则解释器会解释成一个数

2、通过tuple()函数
语法:tuple(可迭代的对象)
例:
b = tuple()
b = tuple(“abc”)
b = tuple(range(3))
b = tuple([2,3,4])

总结
tuple()可以接受列表、字符串、其他序列类型、迭代器等生成元组
list()可以接受元组、字符串、其他序列类型、迭代器等生成元组

元组的访问
和列表完全一样

元组的排序
元组不能修改对象,所以只能通过sorted(tupleObj)生成新的列表对象

>>> a = (1,2,5,3,6,5)
>>> sorted(a)
[1, 2, 3, 5, 5, 6]

zip()
zip(列表1,列表2,列表3,…)将多个列表对应位置的元素组合成元组,并返回这个“zip对象”

>>> a = [1,2,3]
>>> b = [3,4,5]
>>> c = [6,5,4]
>>> d = zip(a,b,c)
>>> d
<zip object at 0x000001DF6CC46608>
>>> list(d)
[(1, 3, 6), (2, 4, 5), (3, 5, 4)]

生成器推导式创建元组
与列表推导式类似,只不过使用的是小括号

>>> s = (x*2 for x in range(4))
>>> s
<generator object <genexpr> at 0x000001DF6CC50048>
>>> tuple(s)
(0, 2, 4, 6)
>>> list(s)    #只能访问一次元素,第二次就为空了,需要再生成一次
[]

生成器可以通过__next__()进行遍历

>>> s = (x*2 for x in range(4))
>>> s.__next__()
0
>>> s.__next__()
2
>>> s.__next__()
4
>>> s.__next__()
6
发布了14 篇原创文章 · 获赞 0 · 访问量 390

猜你喜欢

转载自blog.csdn.net/Bro_Jun/article/details/104712335