(1)列表中元素的替换:
例如:a=[1,2,3,4,5,7] 要将索引为2也就是第三个元素替换为“三”,把列表中一段元素替换
代码如下:
a[2]="三"
a[3:]=["四","五","六"]
(2)列表元素排序:
sort()函数:元素从小到大排序
reverse()函数:元素翻转
sort()函数默认参数:
(3)一些常见函数
count()函数:用于查找列表中某元素的个数
index()函数用于查找某元素的索引值,若该元素出现多次返回最小的索引值,若无改元素则报错
index(x,start,end):在索引值为start到end-1之间查找x
a=[1,2,4,2,1,3,2,42,2]
print(a.count(2))
print(a.index(2))
要替换值为x所在位置的值可以这样写:
a[a.index(3)]=5
copy()用于拷贝一个列表:
b=a.copy() #这样就使得b的元素与a一样
#下面这个语句有同样效果,这是属于浅拷贝
b=a[:]
(4)列表的加法和乘法
加法用于拼接,乘法用于重复,看如下例子:
a=[1,2,3]
b=[4,5,6]
print(a*2)
print(a+b)
得到结果:
(5)嵌套列表与嵌套列表的访问
嵌套列表的定义:以下两种写法都可以,第二种更直观一点
c=[[1,2,3],[1,2,3],[1,2,3]]
c=[[1,2,3]
[1,2,3]
[1,2,3]]
嵌套循环访问嵌套列表:
c=[[1,2,3],[1,2,3],[1,2,3]]
for i in c:
for each in i:
print(each,end=" ")
print()#换行
嵌套列表其实如同多维数组,可以用多个下标这种方式访问:
print(c[0][1]) #访问第1组数据中第二个元素
print(c[0])#访问第一组数据
难以察觉的高级错误:(这里我有点没太懂,需要多理解)
a=[0]*3 #用乘法定义a,其中元素都为0
for i in range(3):
a[i]=[0]*3 #用循环定义嵌套列表a=[[0,0,0],[0,0,0],[0,0,0]]
b=[[0]*3]*3 #用乘法定义b=[[0,0,0],[0,0,0],[0,0,0]]
a[0][1]=2 #修改第一个子列表中第二个值为2
b[0][1]=2 #同样的语句
print(a)
print(b)
执行结果却不一样:
这是因为python对于不同的数据结构存储方式不一样,用is来检测一下:
直接用截图了,python对于不可变的字符串是存储在同样的内存中,但是对于可变的列表,即使它们定义的值相同(长得一模一样)但它们不存储在同一个内存。
存储而对于用以上两种方式定义的A,B 它们的存储结构如下图所示。所以用a[0][1]=2修改值只改了一个元素,而修改b则是三个子列表会一同被修改。
b=[[0]*3]*3试图通过*对嵌套列表进行拷贝,但是它只是相当于重复3次引用嵌套列表的存储。
(
1.浅拷贝 浅拷贝只复制某个对象的引用,而不复制对象本身,新旧对象还是共享同一块内存
2.深拷贝 深拷贝会创造一个一摸一样的对象,新对象和原对象不共享内存,修改新对象不会改变原对对象。)