#列表的增删改查
一、增加
s = [1,2,3,4,5]
s.append(11)
s.extend( [8 , 9] )
s.insert(1,123) #在索引1处插入123
#列表、和普通字符串都是序列。
s = [1,2,3,4,5]
s[len(s):] = [6] #切片,大概就是从一个列表中截取一部分数据
结果:[1, 2, 3, 4, 5, 6]
注意:冒号表示范围,返回的还是一个列表,所以用列表赋值
冒号后面是空白,表示到列表的最后
s = [1,2,3,4,5]
s[len(s)-1] = 7
结果:[1, 2, 3, 4, 7]
二、删除
s.remove(123) #删除具体值
s.pop(0) #按索引删除
s.clear() #清空
三、改
s = [1,2,3,4,5]
s
[1, 2, 3, 4, 5]
s[1:3] = [22,33,44,55] #切片,索引1、2两处改成若干个值,也可以只改成一个值
s
[1, 22, 33, 44, 55, 4, 5]
四、排序
s.sort() # 默认正序
s.reverse() #倒转列表
s.sort(reverse=True) #先排序后倒转
s.count(22) #计算22有多少个
s.index(22) #返回22所处的索引位置
s2 = s.copy()
s3 = s[:] #这两种都是浅拷贝
五、matrix矩阵,二维数组
matrix = [[1,2],[4,5]]
#遍历二维数组
for i in matrix:
for each in i:
print(each)
for i in matrix:
for each in i:
print(each,end = ' ')
print()
#获取元素
matrix[0]
matrix[0][0] #获取第一行第一列的元素
#创建一个二维列表
a = [0]*3
for i in range(3):
a[i] = [0]*3
# is 关键字是比对两个对象是不是指向同一个内存空间的
x = "fish"
y = "fish"
x is y #True #因为字符串内存中只有一份
b = [[0]*3] * 3 #这样创建二维数组,和前面的a不同
a[0] is a[1] # False
b[0] is b[1] # True #因为b这种创建方式,内存中只有一份 [0,0,0]其它的只是引用。
#二维数组copy
x = [[1,2,3],[4,5,6]]
y = x.copy()
x is y #False
x[0][0] = 9
#打印x、y后发现,x、y都改变了。这就是浅拷贝(好像是只拷贝了引用)
import copy #引入拷贝模块(类似java的类)
y = copy.copy(x) #这还是浅拷贝
y = copy.deepcopy(x) # 这是深拷贝 x的如上改变,不会影响y了
#列表推导式
oho = [1,2,3,4,5]
#已知列表中都是数字,让每一个数字都乘以2
for i in range(len(oho)):
oho[i] = oho[i] * 2
还有一种就是列表推导式
oho = [i*2 for i in oho] # [循环体 for遍历]
x = [i+1 for i in range(10)] #得到一个列表,从1到10
x = [[1,2],[4,5]]
y = [row[1] for row in x] #获取矩阵中的第二列,结果为列表 [2,5]
y = [x[i][i] for i in range(len(x))] # 获取对角线 结果 : [1,5]
#这两种方式的结果不完全一致。遍历时修改原内存的值,列表推导式是创建一个新的列表。
#用列表推导式创建一个二维列表
s = [[0]*3 for i in range(2)]
#列表推导式,可以加 if 条件语句
even = [i for i in range(9) if i%2 == 0]
even
[0, 2, 4, 6, 8]
#用列表推导式,筛选出来 f 开头的单词
words = ["a","f1","f2","b"]
words
['a', 'f1', 'f2', 'b']
s = [i for i in words if i[0] == 'f'] #字符串也是列表?或者是序列
s
['f1', 'f2']
#将二维列表按正序变成一维列表
matrix
[[1, 2], [4, 5]]
s = [col for row in matrix for col in row] #可以看出,除了循环体表达式倒装前置了,两个for循环还是正序
s
[1, 2, 4, 5]
相当于:
s2= []
for row in matrix:
for col in row:
s2.append(col)
s2
[1, 2, 4, 5]
#列表推导式,每一个for循环都给一个 if 条件语句
_ = [[x,y] for x in range(9) if x%2 == 0 for y in range(9) if y%3 == 0]
_
[[0, 0], [0, 3], [0, 6], [2, 0], [2, 3], [2, 6], [4, 0], [4, 3], [4, 6], [6, 0], [6, 3], [6, 6], [8, 0], [8, 3], [8, 6]]
#python写代码kiss原则 keep it simple and stupid 保持简洁易懂
网友评论