一码友问我两行代码如何执行的,看似挺简单,但涉及的知识点还挺多,值得细细分析,所以和大家分享。这两行代码为:
a = [0, 1, 2, 3, 4, 5]
a[0:3],a[5]=[[2,3,4,5],7] #重点介绍这句程序
执行完毕上面两行程序之后,大家猜猜,a的结果是多少?
正确答案为:
[2, 3, 4, 5, 3, 7, 5]
不知道聪明的你答对了没。
我给大家分析下:要想理解a[0:3],a[5]=[[2, 3, 4, 5], 7]关键我们要熟知列表的解包、列表的可变性、列表切片、使用索引获取列表值等知识点。
为了更容易理解,我们先将其转换为:
a, b = [[2, 3, 4, 5], 7]
如果还不容易理解,可以再简化为:
a, b = [2, 7]
我们将嵌套列表中的第一个列表元素用2来代替,这样就简单多了。只分析上面这个,如果聪明的你看书认真的话一定听说过列表解包(unpack),什么意思呢?就是2,赋值给a;7赋值给b.
一般来说左边的变量个数要和右边列表的元素(这里的元素可以是列表、元祖、字符串、数字、以及他们的嵌套组合)个数相同。如果不相同就会报错:
这什么错误呢?python给出的错误提示是太多的值要解包(预期2个),通俗讲就是列表中要解包的值是3个,只给出了两个变量来接收,变量少了。
理解了解包,我们容易知道执行
a, b = [[2, 3, 4, 5], 7]
后,a的值为[2, 3, 4, 5];b的值为7。
我们继续往需要理解的代码语句上靠:
a[0:3],a[5]=[[2,3,4,5],7]
等号右边将两个元素解包给a[0:3],a[5],其中a[0:3]是可以理解为利用切片工具指向了列表
[0, 1, 2, 3, 4, 5]
中的[0, 1, 2]几个元素,如果用[2, 3, 4, 5]赋值给a[0:3],可以更新[0, 1, 2]这几个元素,
执行完①后,a列表为[2, 3, 4, 5, 3, 4, 5]。
下面继续执行②,将7赋值给a[5],也就是将[2, 3, 4, 5, 3, 4, 5]中的第6个元素更新为7。至此,语句执行完毕,列表a最后为:
[2, 3, 4, 5, 3, 7, 5]。运行结果如下图:
总结下,这两个语句看似简单,但蕴含了大量的知识点,这也体现了python的简介的特点。