list是什么
列表是一系列按照特定排序的元素组成。是一个有序集合
Python中的列表是由对其它对象的引用组成的连续数组。指向这个数组的指针及其长度被保存在一个列表头结构中
生成式(推导式)
效率很高 比循环语句快一倍 他是用c语言进行运行的 而正常语句是用Python脚本的虚拟机PVM以步进的方式运行
[express for target in iterable]
epress 就是最终会被填写进列表的部分 for in循环语句
# 第一种用法
s = [i*i for i in range(6)]#[0,1,4,9,16,25]
s = [ord(c) for c in 'abc']#[97,98,99] ord()将单个字符转换成编码
a = [[1,2,3],
[4,5,6],
[7,8,9]]
# 第二种用法
b = [row[1] for row in a]#[2,5,8]
# 第三种用法
c = [a[i][i] for i in range(len(a))]#[1,5,9]
index
lis = ['ab','cd','ab',2]
print(lis.index('ab'))#0 从索引低往高找
print(lis.index('ab',1,3))#2
print(lis.index('ab',1,2))#报错
增加元素
切片(也可以添加元素)
切片结果是原列表的一个拷贝
默认步长1
lis = ['ab','cd','ab',2,'q','w','e']
print(lis[0:3:2])#ab ab
print(lis[3:0:-1])#2 ab cd 这个时候还是左闭右开
#如果step是正数lis[start:end:step] 左闭右开
#如果step是负数lis[end:start:step]
lst2 = [3,4,5,6,7]
lst3 = [3,4]
lst4 = [3,4,5,6]
lst[1:] = lst2#['ab', 3, 4, 5, 6, 7]
# 当要加入的数量和被插入部分的数量不一致时
lst[1:5] = lst3#['ab', 3, 4, 'w', 'e'] cd ab 2 q都被切了 换成了 3 4
lst[1,3] = lst3#['ab', 3, 4, 5, 6, 2, 'q', 'w', 'e']
# 相当于是将1-(3-1)这部分位置的元素换成lst3 类似于替换一部分 不管原来部分位置的数量和插入数据的数量
append() 在列表末尾添加一个元素
lst = [1,2,3]
lst2 = [4,5,6]
print('添加前:',lst,id(lst))#添加前: [1, 2, 3] 2158395576768
lst.append(4)
print('添加后:',lst,id(lst))#添加后: [1, 2, 3, 4] 2158395576768
lst.append(lst2)
print('添加后:','lst',id(lst))#添加后: [1, 2, 3, 4,[4, 5, 6]] 1847461597632 这样是将lst2作为一个元素添加到lst中
print(lst[4])#[4, 5, 6]
lst2.append(lst2)# [4,5,6,[...]]这是为什么
会发现添加前后lst的id保持不变 但是其实list在创建大小时是指数分配
当添加的元素大到一定程度时是会改变的
extend()在列表末尾添加至少一个元素
lst = [1,2,3]
lst2 = [4,5,6]
lst.extend(lst2)# [1, 2, 3, 4, 5, 6]
lst2.extend(lst2)# [4,5,6,4,5,6]
insert()在列表中任意位置插入一个元素
insert(pos,val)
lst = [1,2,4]
lst.insert(2,3)
print(lst)#1 2 3 4
删除元素
pop()删除指定索引元素
lst[10,20,30,20]
lst.pop(2)# [10,20,20]
lst.pop()#[10,20,30] 默认删除最后的元素
remove()删除指定值元素
lst[10,20,30,20]
lst.remove(20)# [10,30,20] 有重复的删除最前面的
clear和del
del lst#直接删除列表
lst.clear()#清空列表
排序
sort
并不会创建一个新的list 是再原来的list上进行排序 id(lst)不变
lst.sort()# 默认升序排列
lst.sort(reverse = True)# 降序排列
count()查某个元素在列表中的数量
a = [1,1,1,2,3]
a.count(1)#3
二维矩阵
a = [[1,2,3],[4,5,6],[7,8,9]]
for i in a:
for j in i:
print(j,end = ',')
print()
创建矩阵
A = [None ]*3
for i in range(3)
a[i] = [None] * 2
#A = [[0]*3]*3这样是不行的 每一行都是一样的
# 问题就出在 A = [[0] * 3]*3 这里的每一行都是一个id a[0],a[1],a[2]都是一个id
# A[2][1] = 4结果是[0,4,0][0,4,0][0,4,0]
# 正确做法应该是让每一个a[i]都被赋值
为什么a = [[0] * 3]*3和[0,0,0]*3结果不一样
a = [[0]*3]*3#[[0, 6, 0], [0, 6, 0], [0, 6, 0]]
b = [1,2,3]*3#[1, 2, 3, 1, 2, 3, 1, 2, 3]
a[1][1] = 6