课时11:列表:一个打了激素的数组2
目录:
一、从列表中获取元素
二、从列表删除元素
三、列表分片
四、列表分片的进阶玩法
五、 课时11课后习题及答案
**************************
一、从列表中获取元素
**************************
跟数组一样,我们可以通过元素的索引值(index)从列表获取单个元素,注意,列表索引值是从 0 开始的。
>>> name = ["鸡蛋","鸭蛋","鹅蛋","李狗蛋"] >>> name [0] '鸡蛋' >>> name[3] '李狗蛋' >>> name[1],name[3]=name[3],name[1] >>> name ['鸡蛋', '李狗蛋', '鹅蛋', '鸭蛋']
倒数第二行语句实现了 让“李狗蛋”和“鸭蛋”的位置互调。
***********************
二、从列表删除元素
***********************
从列表中删除元素,这里介绍三种方法:remove()、del和pop().先演示下用remove()删除元素:
>>> name[1],name[3]=name[3],name[1] >>> name ['鸡蛋', '鸭蛋', '鹅蛋', '李狗蛋'] >>> name = ["鸡蛋","鸭蛋","鹅蛋","李狗蛋"] >>> name.remove("李狗蛋") >>> name ['鸡蛋', '鸭蛋', '鹅蛋'] >>> name.remove("哈哈哈") Traceback (most recent call last): File "<pyshell#11>", line 1, in <module> name.remove("哈哈哈") ValueError: list.remove(x): x not in list
使用remove()删除元素,你并不需要知道这个元素在列表中的具体位置,只需要知道该元素存在列表中就可以了。如果要删除的元素根本不在列表中,程序就会报错。
remove()方法并不能指定删除某个位置的元素,这时要用del来实现:
>>> name = ["鸡蛋","鸭蛋","鹅蛋","李狗蛋"] >>> del name[1] >>> name ['鸡蛋', '鹅蛋', '李狗蛋']
注意:del是一个语句,不是一个列表的方法,所以你不必在它的后边加上小括号()。另外,如果你想删除整个列表,还可以直接用del加列表名删除:
>>> del name >>> name Traceback (most recent call last): File "<pyshell#16>", line 1, in <module> name NameError: name 'name' is not defined
最后,演示用pop()方法“弹出”元素:
>>> name = ["鸡蛋","鸭蛋","鹅蛋","李狗蛋"] >>> name.pop() '李狗蛋' >>> name.pop() '鹅蛋' >>> name.pop() '鸭蛋' >>> name ['鸡蛋'] >>> name.pop() '鸡蛋' >>> name []
大家看到啦,pop方法()默认是弹出列表中的最后一个元素。但是这个pop()方法其实还可以灵活应用,当你为它加上一个索引值作为参数时,它会弹出这个索引值所对应的元素:
>>> name = ["鸡蛋","鸭蛋","鹅蛋","李狗蛋"] >>> name.pop(2) '鹅蛋' >>> name ['鸡蛋', '鸭蛋', '李狗蛋']
***************
三、列表分片
***************
利用索引值,每次我们可以从列表获取一个元素,但是我们总是贪心的,如果一次性需要获取多个元素,有没有办法实现呢?利用列表分片,我们可以简单的实现这个要求。
>>> name = ["鸡蛋","鸭蛋","鹅蛋","李狗蛋"] >>> name[0:2] ['鸡蛋', '鸭蛋']
这里用一个冒号隔开两个索引值,左边是开始的位置,右边是结束的位置。这里需要注意一点,结束位置上的元素是不包括的。利用列表分片,得到一个原来列表的拷贝,原来的列表并没有发生改变。 列表分片也可以简写。
>>> name = ["鸡蛋","鸭蛋","鹅蛋","李狗蛋"] >>> name[:2] ['鸡蛋', '鸭蛋'] >>> name[0:2] ['鸡蛋', '鸭蛋'] >>> name[1:] ['鸭蛋', '鹅蛋', '李狗蛋'] >>> name[:] ['鸡蛋', '鸭蛋', '鹅蛋', '李狗蛋']
如果没有开始位置,Python会默认开始的位置是0.同样的道理,如果要得到从指定索引值到列表末尾的所有元素,把结束位置省去即可。如果没有索引值,而只是一个冒号,将得到整个列表的拷贝。 再一次强调:列表分片就是建立原列表的一个拷贝(或者说是副本),所以你想对列表做出某些修改,但同时你想保持原来那个列表,那么直接使用列表分片的方法来获取拷贝就很方便了。
****************************
四、列表分片的进阶玩法
****************************
分片操作实际上还可以接收第三个参数,其代表的是步长,默认情况下(不指定它的时候),该值为1。 注:例子中只有9个元素,索引值到了8.
>>> list1=[1,2,3,4,5,6,7,8,9] >>> list1[0:9:2] [1, 3, 5, 7, 9]
其实还可以写成list1[::2].如果步长为负数,例如-1,就相当于复制了一个反转的列表。
>>> list1=[1,2,3,4,5,6,7,8,9] >>> list1[::2] [1, 3, 5, 7, 9] >>> list1[::-1] [9, 8, 7, 6, 5, 4, 3, 2, 1] >>> list1 [1, 2, 3, 4, 5, 6, 7, 8, 9]
********************************
五、 课时11课后习题及答案
*********************************
0.注意,这道题跟上节课的那道题有点儿不同,回答完请上机实验或参考答案。
old = [1, 2, 3, 4, 5] new = old old = [6] print(new)
如果不上机操作,你觉得会打印什么内容?
[1,2,3,4,5]
1.请问如何将下边这个列表的'小甲鱼'修改为'小鱿鱼'?
list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
>>> list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18] >>> list1 [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18] >>> list1[1][2]=['小鱿鱼'] >>> list1 [1, [1, 2, ['小鱿鱼']], 3, 5, 8, 13, 18]
2.要对一个列表进行顺序排序,请问使用什么方法?
列表名.sort()
>>> list =[1,6,3,5,2,2,7,4] >>> list.sort() >>> list [1, 2, 2, 3, 4, 5, 6, 7]
3.要对一个列表进行逆序排序,请问使用什么方法?
列表名.sort()
列表名.reverse()
或 列表名.sort(reverse=True)
>>> list =[1,6,3,5,2,2,7,4] >>> list.reverse() >>> list [4, 7, 2, 2, 5, 3, 6, 1] >>> list.sort() >>> list [1, 2, 2, 3, 4, 5, 6, 7] >>> list.sort(reverse=True) >>> list [7, 6, 5, 4, 3, 2, 2, 1]
4.列表还有两个内置方法没给大家介绍,不过聪明的你应该可以自己摸索使用的门道吧:copy() 和 clear()
>>> list1 = [0,1,2,3,4] >>> list2 = list1.copy() >>> list2 [0, 1, 2, 3, 4] >>> list1 [0, 1, 2, 3, 4] >>> list1.clear() >>> list1 [] >>> list2 [0, 1, 2, 3, 4]
5.你有听说过列表推导式或列表解析吗?
列表推导式(List comprehensions)也叫列表解析,灵感取自函数式编程语言 Haskell。Ta 是一个非常有用和灵活的工具,可以用来动态的创建列表,语法如:
[有关A的表达式 for A in B]
>>> list1 =[x**2 for x in range(10)] >>> list1 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> list1 = [] >>> for x in range(10): list1.append(x**2) >>> list1 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
问题:请先在 IDLE 中获得下边列表的结果,并按照上方例子把列表推导式还原出来。
>>> list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0] >>> list1 [(0, 1), (0, 3), (0, 5), (0, 7), (0, 9), (2, 1), (2, 3), (2, 5), (2, 7), (2, 9), (4, 1), (4, 3), (4, 5), (4, 7), (4, 9), (6, 1), (6, 3), (6, 5), (6, 7), (6, 9), (8, 1), (8, 3), (8, 5), (8, 7), (8, 9)]
>>> list = [] >>> for x in range(10): for y in range(10): if x%2 == 0: if y%2 != 0: list.append((x,y)) >>> list [(0, 1), (0, 3), (0, 5), (0, 7), (0, 9), (2, 1), (2, 3), (2, 5), (2, 7), (2, 9), (4, 1), (4, 3), (4, 5), (4, 7), (4, 9), (6, 1), (6, 3), (6, 5), (6, 7), (6, 9), (8, 1), (8, 3), (8, 5), (8, 7), (8, 9)]
上一篇: 网络IO之NIO
下一篇: hammer.js实现移动端幻灯片