当前位置:   article > 正文

详解python列表中冒号的用法

python列表中冒号的用法

详解python列表中冒号的用法

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

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

乍一看没什么区别,但实际上第一行的写法会变动原有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])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
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]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

赋值

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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
output:
[999, 2, 3, 4]
[999, 2, 3, 4]
1941272299200 1941272299200
  • 1
  • 2
  • 3
  • 4

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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
output:
1941309309504
[999, 2, 3, 4]
[1, 2, 3, 4]
1941311084864 1941311555328
  • 1
  • 2
  • 3
  • 4
  • 5

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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
output:
1941271365120 1941271365120
[9, 8, 7, 6]
[9, 8, 7, 6]
1941271365120 1941271365120 1941307133568
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/558151
推荐阅读
相关标签
  

闽ICP备14008679号