本文将探索:
![c53ff2f895da7e7d37dc278911035213.png](https://img-blog.csdnimg.cn/img_convert/c53ff2f895da7e7d37dc278911035213.png)
【探索内容】
1.修改或增加列表元素(赋值语句,append方法,extend方法,insert方法)
1.1 使用索引表示法给特定位置的元素赋值
使用类似普通赋值语句那样,就能修改列表,不同之处在于需要使用索引表示法给特定位置的元素赋值,如:
h = ["gang_tie_xia_hua",18]
h[0] = "steel_flower"
print(h)
结果为:["steel_flower" ,18]
注:不能给不存在的元素赋值,因此如果列表的长度为2,就不能给第3个元素(索引值为2)的元素赋值。
创建N个元素的List时,Python的动态内存会分配N+1个元素的内存,依次存储,列表长度和列表的元信息。
直白点,由上一篇文章可知,当我们敲下huahua = ["gang_tie_xia_hua",18]时,列表huahua有2个元素,计算机内存会找到“3个小抽屉”存储,其中,第1个小抽屉计算机用于存储关于huahua列表长度的相关信息等,后面两个小抽屉依次存储huahua列表里面的元素。(如果你想刨根问底探索python究竟是如何存储列表List信息的,可以参考书籍《High Performance Python》by O'Relly Media,或《Fluent Python》by O'Relly Media,后面不再赘述)。
![16440d58082474a3128ad88fd932a67a.png](https://img-blog.csdnimg.cn/img_convert/16440d58082474a3128ad88fd932a67a.png)
1.2 append:将一个对象附加到列表末尾。
方法是与对象(列表、数、字符串等)联系紧密的函数。通常,像下面这样调用方法:object.method(arguments),具体使用见下面的栗子。方法调用与函数调用很像,只是在方法名前加上了对象和句点(后续内容会继续探索方法)。
h = ["steel_flower",18]
h.append("graduate")
print(h)
这时,结果为: ["steel_flower",18,"graduate"]
object.method(arguments),就像数学公式一样,将列表h放入object的位置,append为列表的方法method,圆括号必不可少,圆括号里面为方法的参数,这个例子中,参数为"graduate",即:h.append("graduate")。
注:不要自行加内容,有些方法是通用的有些不是,常用的记住即可,其他的需要使用时查阅官方文档即可。不要自己扩大使用范围。如append:将一个对象附加到列表末尾,不要试图给字符串使用append。
细心的朋友可能会问:前面我们讲赋值的时候提到,不能给第3个元素赋值,因为没有多余的“小抽屉”,为什么这里就可以再添加元素了呢?其实,python是一门很灵活的语言,当列表huahua使用append方法试图添加新元素的时候,计算机内部会对列表huahua进行一顿操作,重新找一堆足够大的空抽屉,然后,旧抽屉里列表huahua的元素被copy到新抽屉中,旧抽屉里的数据被销毁。
题外话:这样包含几个元素“搬迁”的操作,对于计算机而言,可能是小菜一碟,但是当元素个数足够多的时候,对于计算机而言,负担也不小,这些操作所消耗的时间及空间,会对代码的运行效率造成影响,感兴趣的朋友可以上网自行搜索“算法 复杂度”相关知识。后续也会出算法相关探索教程,感兴趣可以关注一下作者~
1.3 extend:同时将多个值附加到列表末尾。
可将多个值组成的序列作为参数提供给方法extend。即,可使用一个列表来扩展另一个列表。
h = ["steel_flower",18]
h.extend("graduate")
print(h)
结果为:['steel_flower', 18, 'g', 'r', 'a', 'd', 'u', 'a', 't', 'e']
多试试几个栗子:
h = ["steel_flower",18]
h.extend([1,2,3])
print(h)
h = ["steel_flower",18]
h.extend(["hello"])
print(h)
完成挑战1.
1.4. insert:将一个对象插入列表。
h = ["steel_flower",18]
h.insert(1, 'four')
print(h)
2.删除列表元素(del语句,clear方法,pop方法,remove方法)
2.1:使用del语句删除元素
如删除第2个元素:
h = ["steel_flower",18]
del h[1]
print(h)
2.2 clear:h.clear()就地清空h列表的内容 (等同于del h[:]
)
h = ["steel_flower",18]
h.clear()
print(h)
结果为:[]
注:
- h.clear()圆括号必不可少。
- 这类似于切片赋值语句h[:] = []。
2.3 pop h.pop(i)
提取在 i位置上的项,并将其从h中移除。
h = ["steel_flower",18]
a = h.pop(1)
print("a is: ", a)
print("now h is: ", h)
注:
1. pop是唯一既修改列表又返回一个非None值的列表方法。
2. h.pop()提取在最后一个位置上的项,并将其从h中移除。
2.4. remove:删除第一个为指定值的元素。
h = ['to', 'be', 'or', 'not', 'to', 'be']
h.remove('be')
print(h)
结果为:['to', 'or', 'not', 'to', 'be']
注: remove不同于pop的是,它修改列表,但不返回任何值。直白些:remove删除的那个元素,直接就扔掉了,你不能再使用它;而pop删除的那个元素,你还可以使用它,把它赋值给别的元素,或者直接打印出它。
3.复制
3.1 通过赋值语句“复制”
我们先看看常规复制(只是将另一个名称关联到列表),通过赋值的操作“复制”的效果:
a = [0, 1, 2, 3, 4, 5, 6]
b = a
b[0] = "*"
print("a is: ", a)
print("b is: ", b)
![69a5484722b8f7cb0990fbc0e55d417c.png](https://img-blog.csdnimg.cn/img_convert/69a5484722b8f7cb0990fbc0e55d417c.png)
可以看到虽然修改的是列表b的第一个元素的值,但是列表a第一个元素的值也改变了。因为,这种b = a赋值,使得b与a指向了同一个内存中的小抽屉。
3.2 copy: a.copy()复制列表。
要让a和b指向不同的列表,就必须将b关联到a的副本,直白点,把a指向内存中小抽屉里的数据复制一份,放在另一个小抽屉里,然后用b指向新的小抽屉,这样,对b进行任何操作,不会对a造成影响, 即 copy方法。
a = [0, 1, 2, 3, 4, 5, 6]
b = a.copy()
b[0] = "*"
print("a is: ", a)
print("b is: ", b)
结果为:
![4b03439639e0fae2a507db24488e5320.png](https://img-blog.csdnimg.cn/img_convert/4b03439639e0fae2a507db24488e5320.png)
b = a.copy()类似于使用b = a[:],它们都复制a。
题外话:
- 举栗是为了小白初识代码时不至于感到云里雾里,栗子只是在某一方面更好的理解原理知识,但栗子和实际情况并非完全一致,切忌生搬硬套!
2. 后面探索的一些方法,背后都涉及到计算机内部复杂的操作,使得这些方法满足相应的操作意图。对于内部原理过于复杂的知识点,不再探究屏幕背后计算机的相关操作。
3.列表是python中的重要知识点,本文提到的方法,都是需要熟知的。此外,若用得到其它方法,参考官方文档即可。文章中所探索的知识点(有时虽然很多),都是常见的,以后不再赘述。
4.从本文开始,我们相当于正式开始了python之旅了,可以告别菜鸟工具了,尝试自己安装一下软件(选择任选一个软件下载即可)
anaconda(国内用户可以选择清华大学开源软件镜像站anaconda下载,注意版本选择发行距离现在较近的); 或者下载pycharm官网页面Community下面的download,或下载其他任何你喜欢的IDE。
注意安装和自己的电脑相容的版本,有问题,善用搜索引擎,记住:你遇到的99.99%的问题,别人都遇到过,且使用搜索引擎可以找到解决方案。
【挑战】
1.分别append,extend方法给列表a=[1,2,3]添加元素:"a", "hello", ["hello"], ["hi",99], [5,6,7], [ ],打印输出结果,比较列表方法append,extend不同之处。
2.参考官方文档count方法,计算指定的元素在列表中出现了多少次。打印a = ['to', 'be', 'or', 'not', 'to', 'be']中‘to’出现的次数。
3.参考官方文档,分别使用方法reverse,sort,对列表 a = [1,9,2,8,3,7]进行排序,打印输出经过排序后原列表a,比较方法reverse,sort的不同。