kin_sin 2021-01-08 12:41 采纳率: 100%
浏览 7
已采纳

python3一个简单问题求解答。

 a,b=b,a显然是常用的交换方法,但是在list切片中出现了以下情况,请问发生了什么,是否涉及什么原理

 

  • 写回答

5条回答 默认 最新

  • PythonJavaC++go 2021-01-08 18:01
    关注

    切片索引赋值3:

    a[k:] = a[:k]; (x = y)即用列表a从0到k位的数据覆盖列表a从k位到尾的数据,y多出来的则自动扩展x,x第k位后面若有数值则自动后移,即执行的是insert。

    list切片赋值,涉及到的大致就这三种情况了。

    另外,x, y = y, x的本质就是tmp = x,x = y, y = tmp

    x、y为列表切片时也是一样的。

    你按tmp = x,x = y, y = tmp这个顺序。再结合切片索引的赋值情况去理解就可以了。

    当k = 9 时。b那列:

    # k = 9
    #
    # tmp = a[:k] # [1, 2, 3, 4, 5, 6, 7, 8, 9], 此时a还是[1到10]
    # a[:k] = a[k:] # [10], 此时a 为[10, 10]; 因为a[:9] = [9:], 此时a的前9位数(a[:9])被10(即[9:])覆盖
    # a[k:] = tmp # 运算前a 为[10, 10],a[k:] = []; tmp = [1-9]; 此时的运算即 a + 【】,此时的【】空列表为tmp,即a.exted(tmp),故运算后a=[10, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    #
    # # 反过来: b[k:], b[:k] = b[:k], b[k:],最终b =[10, 1-9] (第一步;tmp=[10], 第二步:b[k:]=[1-9],b=[1-9,1-9], )

    你可以结合这个案例理解一下索引切片赋值。三种情况个人总结。

     

    (上面不懂,没关系。按tmp = x,x = y, y = tmp这个顺序。x=y时列表是有发生变化的,这两点自己去理解即可)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档