insert 语句的选择列表包含的项多于插入列表中的项_2.2 (2)列表的基本操作及方法

本文将探索:

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

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)

结果为:[]

注:

  1. h.clear()圆括号必不可少。
  2. 这类似于切片赋值语句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

可以看到虽然修改的是列表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

b = a.copy()类似于使用b = a[:],它们都复制a。

题外话:

  1. 举栗是为了小白初识代码时不至于感到云里雾里,栗子只是在某一方面更好的理解原理知识,但栗子和实际情况并非完全一致,切忌生搬硬套

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的不同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值