列表
1.切片操作
列表的基本正序和倒序在python中切片操作的详细用法 - wakappxc - 博客园 (cnblogs.com)中有解释
2.一些方法
append方法:
a=["w","s"] a.append("d") print(a) #输出 ['w', 's', 'd']
extend方法:
extend方法的参数必须是一个可迭代对象,新的内容是追加到原列表最后一个元素的后面
a=["w","s"] a.append("d") print(a) a.extend(["sadas","xcxcx"]) print(a) #输出 ['w', 's', 'd'] # ['w', 's', 'd', 'sadas', 'xcxcx']
当然我们也可以用切片操作实现append和extend方法
a=["w","s"] a[len(a):]=[5,"2333"] print(a) #['w', 's', 5, '2333']
注意代码中的len(a)也就是列表a最后一个元素之后的元素开始进行添加 不然的话会导致覆盖
insert方法:
在任意位置插入元素
a=["w","s"] a.insert(0,"dsadfas") print(a)
#['dsadfas', 'w', 's']
insert中第一个参数代表的是要插入的位置 ,也就是索引。第二个参数代表的要插入的内容
remove方法:
删除列表中的元素
ATTENTION:
1.如果列表中存在多个匹配的元素,那么它只会删除第一个
2.如果指定的元素不存在,那么程序就会报错
pop、clear方法:
直接弹出所指索引的元素
a.pop(索引) a.clear()#列表全部清零
替换、sort、reverse:
替换的话就直接可以列表中的某个值直接修改,或者说是通过切片操作进行一系列的替换
a=["a","b","c","d"] a[1:]=["c","c","c","c"] print(a) #['a', 'c', 'c', 'c', 'c']
a.sort() 对列表中的值进行排序
a.reverse()对列表中按索引进行反向排序
而在sort方法里直接可以加reverse
a.sort(reverse=True)
count、index、copy:
利用count进行查找
a=['a', 'c', 'c', 'c', 'c'] print(a.count("c")) #4
利用index查找值所在的索引(位置)
注意它只会输出找到的第一个
index(x,start,end) #查找的内容 开始和结束的位置
a=['a', 'c', 'c', 'c', 'c'] print(a.index('c',1,2)) #1
a=[1,1,1] b=a.copy() print(b) #[1, 1, 1]
但是我们也可以用切片的操作进行(切片的强大功能)
a=[1,1,1] b=a[:] print(b)
3.列表的加法和减法
加法和乘法:
嵌套列表(nested list):
也就是所谓的二维列表
访问嵌套列表(access nested list):
不能采用这中方法 会产生错误(这个时候我们就需要引入一个新的运算符)
is(is operator):
is运算符也称作为同一性运算符,它是用于检验两个变量是否指向同一个对象的一个运算符
由于字符串都是一样的所以两个变量都是指向同一个字符串所以x 和 y是具有同一性
相比于字符串,列表则是可变的,因此python还是需要为他们开辟两个不同的位置
在创建一维列表之后,在每个索引里又创建列表 就变成了二维列表
4.变量不是盒子
变量不是盒子:
一个变量赋值给另外一个变量其实就是引用
上述中对x进行修改的同时y也进行了修改可以验证上述逻辑。如果我们想得到两个独立的列表我们需要用到拷贝
浅拷贝和深拷贝(shallow and deep copy):
浅拷贝无非就是调用列表的copy方法,或者使用切片的语法来实现,因为copy拷贝的是整个列表对象,不仅仅是变量的引用,
那利用切片的语法操作也可以实现拷贝的效果
这两种方式都称为浅拷贝
而在嵌套列表中这种就会失效,如上图浅拷贝是拷贝的外层列表,此时里层就会失效了
而要使用深拷贝需要借助copy模块
如上图,虽然我们引用了copy模块,但是copy模块也会有浅拷贝(copy)和深拷贝(deepcopy)的区别
而deepcopy函数将原对象拷贝的同时,也将对象中所有引用的子对象一并进行拷贝,这就是深拷贝。
这些是copy模块里的函数区别于原来的方法。(在没有学到类之前当成一个东西看就好了)
5.列表推导式(list comprehension expression)
我们可以通过这种for循环的方式来达到目的,但是是否会有更好的方法呢?是的这就是我们要说的列表推导式了
这就是列表推导式了
“FishC”中每一个字符*2然后依次进行输出
如果想将每一个字符都转换成对应的Unicode编码并保存为列表,我们可以这样写:
ord()这个内置函数的作用就是将单个字符串转换为对应的编码
举证二维列表每个列表的第二个元素
举证对角线元素,matrix[i][i]
综上,循环是通过迭代来逐个修改原列表中的元素,而列表推导式则是直接创建一个新的列表,然后再赋值为原来的这个变量名
把首字符为'F'的取出来,二维的列表推导式还可以进行嵌套来更加复杂
这样就把它一个一个都输出来了
这里我们接着上面把列表清空之后用append方法一个一个都可以直接添加进去
我们可以发现是一模一样的结果,我们可以发现外层循环是放在前面的,嵌套内层的循环是放在后面的
我们可以验证一下确实如此
我们设置的_变量代表的是临时的,无关紧要的变量
但是其实终极语法其实是这个样子的