运算符
列表(list)
常用序列结构:字符串、列表、元组、字典、集合
a = [10,20,30,40]:首先创建四个对象,然后将4个对象的ID保存到列表里面(a[0]…),a变量保存着列表的ID。
列表是可变的,不同于字符串。
>>> a = [10,'sxl','1万']
>>> id(a)
2283244129664
>>> id([10,'sxl','1万'])
2283244125440
>>> id(10)
140735345932352
>>> id(a[0])
140735345932352
4种创建列表方法
- 基本语法[]
>>> a = [] #创建一个空的列
- list()创建
通常将可迭代对象转化为列表
>>>a = list() #等价于 a = []
>>>a = list('sxl')
>>> a
['s', 'x', 'l']
>>> list(range(5))
[0, 1, 2, 3, 4]
- range()创建整数列表
range([start,] end [,step])
>>> list(range(3,15,2))
[3, 5, 7, 9, 11, 13]
>>> list(range(15,3,-1))
[15, 14, 13, 12, 11, 10, 9, 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
列表元素的增加
一般只在尾部操作,内部插入,列表元素移动,效率低
#append()方法,尾部添加新元素,不创建新的列表对象
>>> a = ['sxl',123]
>>> a.append(666)
>>> a
['sxl', 123, 666]
#extend()方法,尾部添加新列表,不创建新的列表对象
>>> a.extend([33,'yq'])
>>> a
['sxl', 123, 666, 33, 'yq']
#+运算符操作,创建新的列表对象
>>> a = [20,40]
>>> id(a)
46016072
>>> a = a+[50]
>>> id(a)
46015432
#insert()插入元素,元素后移
>>> a.insert(2,'zpw')
>>> a
['sxl', 123, 'zpw', 666, 33, 'yq']
#乘法扩展
>>> a *=3
>>> a
['sxl', 123, 'zpw', 666, 33, 'yq', 'sxl', 123, 'zpw', 666, 33, 'yq', 'sxl', 123, 'zpw', 666, 33, 'yq']
列表元素的删除
本质上还是拷贝元素
#del 删除 针对索引
>>> a = [100,200,'30',66,30,199,455,30,60]
>>> del a[6]
>>> a
[100, 200, '30', 66, 30, 199, 30, 60]
#pop() 针对索引,删除指定位置,并且返回
>>> a.pop()
60
>>> a
[100, 200, '30', 66, 30, 199, 30]
>>> a.pop(0)
100
>>> a
[200, '30', 66, 30, 199, 30]
#remove(),针对具体元素(首次出现)
>>> a.remove(30)
>>> a
[200, '30', 66, 199, 30]
列表元素访问和计数
>>> a.index('30') #索引
1
>>> a.count(30) #计数
1
>>> len(a) #长度
5
>>> 20 in a #判断
False
列表切片
同字符串的切片操作
>>> a
[200, '30', 66, 199, 30]
>>> a[1:]
['30', 66, 199, 30]
>>> a[1:3]
['30', 66]
>>> a[-3:-1]
[66, 199]
>>> a[:-1]
[200, '30', 66, 199]
列表遍历
for obj in listObj:
print(obj)
列表排序
- sort()排序
直接修改原列表,不创建新列表
调用列表对象的方法。
>>> a = [1,3,6,0,5,4,2]
>>> a.sort()
>>> a
[0, 1, 2, 3, 4, 5, 6]
>>> a.sort(reverse = True)
>>> a
[6, 5, 4, 3, 2, 1, 0]
- 内置函数sorted()排序
>>> sorted(a) #生成新列表,原列表不变,默认升序
[0, 1, 2, 3, 4, 5, 6]
>>> a
[6, 5, 4, 3, 2, 1, 0]
小疑问:sort()不返回值,只是一个方法;而sorted()返回值(对象),是一个函数。
常用函数
>>> a = [3,7,1,9,10,4]
>>> max(a)
10
>>> min(a)
1
>>> sum(a)
34
二维列表
和C语言的二维数组相似
a = [
['sxl',21,1000],
['yq',21,500]
]
for i in range(2):
for j in range(3):
print(a[i][j],end = '\t')
print()
#以下为打印出的表格
sxl 21 1000
yq 21 500
元组(tuple)
列表可变,元组不可变序列,不能修改,以下方法同列表
- 索引访问
- 切片操作
- 连接操作
- 成员关系操作
- 比较运算操作
- 计数:元组长度 len()、最大值 max()、最小值 min()、求和 sum()等
元组创建
- 基本语法()
>>> a = (1,2,3)
>>> a
(1, 2, 3)
>>> b = (1,) #一个元素,必须加,
>>> b
(1,)
- tuple()创建
>>> a = tuple(range(4))
>>> a
(0, 1, 2, 3)
>>> a = tuple('sxl')
>>> a
('s', 'x', 'l')
- ZIP,将多列表合并为元组
>>> a
[1, 2, 3, 5, 9]
>>>
>>> a
[1, 2, 3, 5, 9]
>>> b
[66, 77, 88]
>>> c = zip(a,b)
>>> c
<zip object at 0x000002A2D8A98548>
>>> tuple(c)
((1, 66), (2, 77), (3, 88))
- 生成器推导式创建元组
>>> s = (x*2 for x in range(5)) #推导式
>>> s #生成器,只生成一次
<generator object <genexpr> at 0x000002A2D8915548>
>>> tuple(s) #生成器转化为元组
(0, 2, 4, 6, 8)
元组排序
>>> a = (3, 5, 1, 2, 9)
>>> sorted(a)
[1, 2, 3, 5, 9]