可变字符串
使用io.StringIO对象或array模块。
>>> import io#导入io模块
>>> s="hello,sxt"
>>> sio=io.StringIO(s)#使用函数
>>> sio
<_io.StringIO object at 0x000001F75CD490D8>
>>> sio.getvalue()#查看可变字符串
'hello,sxt'
>>> sio.seek(7)#找到并定位索引7位置
7
>>> sio.write("g")#修改为“g”
1
>>> sio.getvalue()#查看变化后可变字符串
'hello,sgt'
运算符
基本运算符
Python允许这种形式
位运算实例
移位实例
>>> a=3
>>> a<<1#a*2(2的1次方)
6
>>> a<<3#a*8(2的3次方)
24
>>> a=12
>>> a>>2#a除以2的平方的商(int型)
3
>>> a>>3#a除以2的3次方的商(int型)
1
小结:
1.比较运算符可以连用,并且含义和我们日常完全一致。
2.位操作
注:与C和JAVA不一样,Python不支持自增(++)和自减(–)
复合赋值运算符
运算符优先级
1.乘除优先加减
2.位运算和算术运算>比较运算符>逻辑运算符
序列
常用序列结构:字符串、列表、元组、字典、集合
注:存储的是地址,而不是值。
列表
列表的元素可以各不相同,可以是任意类型。
列表大小可变,根据需要随时增加或缩小。
列表的创建
- 基本语法[]创建
>>> a=[1,'r',12]
>>> a
[1, 'r', 12]
- list()创建
>>> a=list("nihao")
>>> a
['n', 'i', 'h', 'a', 'o']
使用list()可以将任何可迭代的数据转化成列表。
- range()创建整数列表
range([start,],end[,step])
>>> list(range(0,10,1))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(3,20,2))
[3, 5, 7, 9, 11, 13, 15, 17, 19]
>>> list(range(20,3,-1))
[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4]
>>> list(range(-10,-20,-2))
[-10, -12, -14, -16, -18]
- 推导式生成列表
>>> 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]
>>> a
[0, 18, 36, 54, 72, 90, 108, 126, 144, 162, 180, 198]
列表元素的增加和删除
一般只在列表的尾部添加和删除元素,这会大大提高列表的操作效率。
列表元素的增加
- append()速度最快,不创建新对象
>>> a=[1,13]
>>> id(a)
2161927160776
>>> a.append(20)
>>> a
[1, 13, 20]
>>> id(a)
2161927160776
- +运算符操作 创建新对象,不推荐
>>> a=a+[50]
>>> a
[1, 13, 20, 50]
>>> id(a)
2161927160712
- extend()不创建新对象,速度快
>>> a
[1, 13, 20, 50]
>>> a.extend([1,2])
>>> a
[1, 13, 20, 50, 1, 2]
- insert()插入元素 影响速度,不推荐
>>> a.insert(2,100)
>>> a
[1, 13, 100, 20, 50, 1, 2]
列表元素的删除
- del删除
>>> a=[10,20,30]
>>> a
[10, 20, 30]
>>> del a[1]
>>> a
[10, 30]
- pop()方法
pop()删除并返回指定位置元素,如果未指定位置则默认操作列表最后一个元素。
>>> a=[1,2,3,4,5]
>>> b=a.pop()
>>> b
5
>>> a
[1, 2, 3, 4]
- remove()方法
删除首次出现的指定元素,若不存在该元素,抛出异常。
>>> a=[20,30,40,50,60]
>>> a.remove(30)
>>> a
[20, 40, 50, 60]
>>> a.remove(100)
Traceback (most recent call last):
File "<pyshell#74>", line 1, in <module>
a.remove(100)
ValueError: list.remove(x): x not in list
列表元素访问和计数
通过索引直接访问元素
我们可以通过索引直接访问元素。缩印的区间在[0,列表长度-1]这个范围。超过这个范围则会抛出异常。
a.index()获得指定元素在列表中首次出现的索引
a.count()获得指定元素在列表中出现的次数
len(a)返回列表长度
成员资格判断
in
not in
列表排序
- 修改原列表,不建新列表的排序
a.sort()
>>> a=[1,3,2,5]
>>> id(a)
2161927206472
>>> a.sort()
>>> a
[1, 2, 3, 5]
>>> id(a)
2161927206472
>>> a.sort(reverse=True)
>>> a
[5, 3, 2, 1]
random.shuffle(a)
>>> import random
>>> random.shuffle(a)
>>> a
[3, 1, 5, 2]
>>> random.shuffle(a)
>>> a
[5, 2, 3, 1]
- 建新列表的排序
sorted(a)
>>> a
[5, 2, 3, 1]
>>> id(a)
2161927206472
>>> a=sorted(a)
>>> a
[1, 2, 3, 5]
>>> id(a)
2161927160776
>>> a=sorted(a,reverse=True)
>>> a
[5, 3, 2, 1]
reversed()返回迭代器
不对原列表做任何修改,只是返回一个逆序排列的迭代器对象。
>>> a
[5, 3, 2, 1]
>>> c=reversed(a)
>>> c
<list_reverseiterator object at 0x000001F75CE2E4A8>
>>> list(c)
[1, 2, 3, 5]
max()
min()
sum()
多维列表
二维列表
>>> a=[
['高一',18,30000],
['高二',19,20000],
['高三',20,10000]
]
>>> a
[['高一', 18, 30000], ['高二', 19, 20000], ['高三', 20, 10000]]
>>> a[0][0]
'高一'
元组 tuple
列表属于可变序列,可以任意修改列表中的元素。元组属于不可变序列,不能修改元组中的元素。
- 直接创建
>>> a=(10,20,30)#直接创建元组
>>> a
(10, 20, 30)
>>> type(a)
<class 'tuple'>
>>> a=10,20,30#直接创建元组
>>> a
(10, 20, 30)
>>> type(a)
<class 'tuple'>
>>> b=(1)
>>> type(b)
<class 'int'>
>>> b=(1,)#这种方式才是元组
>>> type(b)
<class 'tuple'>
- tuple()
>>> c='asdf'
>>> c=tuple(c)
>>> c
('a', 's', 'd', 'f')
>>> tuple([1,2,3])
(1, 2, 3)
>>> tuple(range(3))
(0, 1, 2)
元组的访问和处理速度比列表快!!
- 生成器推导器创建元组
只能访问一次元素,第二次为空,类似指针。