【Python学习】列表及切片(2)

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.深拷贝 深拷贝会创造一个一摸一样的对象,新对象和原对象不共享内存,修改新对象不会改变原对对象。)

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值