前言
这周老师的重点在于带着我们搞清楚list和string的相关变换,其中最难的一点在于底层存储和函数的作用域。
讲了好多节课= =
再然后的一个新知识点是关于列表里的索引,比如list[0][1][2]之类的。
一、swap的变换
def swap01(name):
return name[1:2] + name[:1] + name[2:] #1
def swap01L(lst):
return lst[1:2] + lst[:1] + lst[2:] #2
def xswap01(lst):
temp = lst[0] #3
lst[0] = lst[1]
lst[1] = temp
以上是对于string和list的第一个及第二个字母变换的相关函数。
其中,第一个函数处理string,第二个函数处理list,但是这两种方式都不会改变传入参数的底层存储,二者均只是返回了通过切片组成的字符串,并且在运行函数的过程中,由于输入的参数name和lst是局部变量,所以会开辟新的空间为二者进行函数变换,但是一旦出了函数的作用域,其生存周期结束,开辟的空间会被释放,所以真正传入的底层参数并不会发生改变。
第三个函数能够同时作用在string和list中,并且会改变底层输入参数的相关信息,因为其为【赋值】方式。
(在C语言中,数组&列表的变换由底层指针来进行变换,python中虽然没有指针,但是原理应该是一样的)
真的很头大,但是一旦画框框用箭头表示就会很清楚,比如:
方框代表底层存储的空间,箭头代表这块地址指向的存储空间。【This picture is just an example!】
代码如下(示例):
lst = [-1, 0, ['-1', '0', 1], "-1,0"] #print(lst[0][0]) print(lst[3][0]) print(lst[2][0][0]) print(lst[2][0][-1]) print(lst[lst[0]] + ",1") print(lst[2][:-1] + [int(lst[3][-1])])
其中,print(lst[0][0])是会报错的,因为取数组中第一个数是-1,对于int类型,无法取[0]。
对于这个列表,可以用下图清晰判断其结构:
仔细想想就ok了hhh,还挺有意思的。
今日over
总结
好好复习: )



