当前位置: 移动技术网 > IT编程>脚本编程>Python > 课时11:列表:一个打了激素的数组2

课时11:列表:一个打了激素的数组2

2018年07月30日  | 移动技术网IT编程  | 我要评论

喷墨打印机打印不清楚,范鸿轩老婆,养壁虎

目录:

  一、从列表中获取元素

  二、从列表删除元素

  三、列表分片

  四、列表分片的进阶玩法

  五、 课时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)]

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网