详解python列表中冒号的用法

详解python列表中冒号的用法

写这个专题是因为做Leetcode第88题被两个写法坑了一下

nums1 = sorted(nums1[:m]+nums2[:n])
nums1[:] = sorted(nums1[:m]+nums2[:n])

乍一看没什么区别,但实际上第一行的写法会变动原有num1的物理地址,而第二种不会变动物理地址,只是修改当前地址里的内容。详细请看下文。

切片

常规操作,看看就行

#a[x:y] 左闭右开
a = [[1,2,3,4],\
     [5,6,7,8],\
     [9,10,11,12],\
     [-1,-2,-3,-4]]
print(a[:2])
print(a[1:])


b = [1,2,3,4,5,6,7,8,9,10]
#逆序
print(b[::-1])

#间隔 
print(b[::2])
print(b[::4])
output:
[[1, 2, 3, 4], [5, 6, 7, 8]]
[[5, 6, 7, 8], [9, 10, 11, 12], [-1, -2, -3, -4]]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
[1, 3, 5, 7, 9]
[1, 5, 9]

赋值

a=b型

a = [1,2,3,4]
b = [9,8,7,6]

#python中没有真正的赋值 等号可以理解为绑定
#改c也会改动a
#可以看到a、c内存地址一样
c = a
c[0] = 999
print(c)
print(a)
print(id(a),id(c))
output:
[999, 2, 3, 4]
[999, 2, 3, 4]
1941272299200 1941272299200

a=b[:]型

a = [1,2,3,4]
b = [9,8,7,6]
c = [114514]
print(id(c))
#冒号语句在右边会为当前对象创建一个新地址
#改c不会变动a
c = a[:]
c[0] = 999
print(c)
print(a)
print(id(a),id(c))
output:
1941309309504
[999, 2, 3, 4]
[1, 2, 3, 4]
1941311084864 1941311555328

a[:]=b[:]型

a = [1,2,3,4]
b = [9,8,7,6]

#冒号语句在左边会变动左边对象的内容 地址不变

c = a
print(id(a),id(c))
c[:] = b 
print(c)
print(a)
print(id(a),id(c),id(b))
output:
1941271365120 1941271365120
[9, 8, 7, 6]
[9, 8, 7, 6]
1941271365120 1941271365120 1941307133568
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值