10
结合数组理解,列表是更为强大的数组,数组中只能有一种数据类型,而列表中可以有多种;
三种向列表中添加元素方法:
①append()#只能添加一个元素,在列表尾部添加
>>> member=['bai','hei','2']
>>> member.append(['huang','5'])
>>> member
['bai', 'hei', '2', ['huang', '5']]
②extend()#以列表形式添加多个元素,类似于合并两个列表,也在尾部加入
>>> member=['bai','hei','2']
>>> member.extend(['huang','5'])
>>> member
['bai', 'hei', '2', 'huang', '5']
③insert()#指定元素位置插入
>>> member=['bai','hei','2']
>>> member.insert(0,'huang')
>>> member
['huang', 'bai', 'hei', '2']
>>> member.insert(1,['fen','lan'])
>>> member
['huang', ['fen', 'lan'], 'bai', 'hei', '2']
似乎不能同时插入多个
>>> member=['bai','hei','2']
>>> member.insert(1,'1',2,'fen')
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
member.insert(1,'1',2,'fen')
TypeError: insert() takes exactly 2 arguments (4 given)
11
1、从列表中删除元素
①remove()
member.remove('2')#括号中是列表的某个元素值
②del#不带括号,是类似于print那样的语句
>>> member
['1', '1', 'wwww', 'eee']
>>> del member[0:2]
>>> member
['wwww', 'eee']
>>>
删除一个,整个都可以
③pop()#把列表视为栈,后进先出;括号里加序列号可删除某固定位置元素
>>> member=['1','wwww','eee']
>>> member.pop()
'eee'
>>> member
['1', 'wwww']
>>> member.pop(0)
'1'
>>> member
['wwww']
>>>
2、列表分片,类似matlab
>>> member=['1', '1', 'wwww', 'eee']
>>> member[1:2]
['1']
>>> member[1:5]
['1', 'wwww', 'eee']
>>> member[:2]
['1', '1']
>>> member[3:]
['eee']
>>> member[2:]
['wwww', 'eee']
可以看出,冒号前面数字是真正的序列号,而冒号后面数字到不了
3、拷贝列表
member2=member[:]
list1=[1,3,2,4]
list2=list1[:]
list3=list1
print(list1,list2,list3)
list1.sort()
print(list1,list2,list3)
list1=[1,2,3,4]
list2=[1,3,2,4]
list3=[1,2,3,4]
注意!这里不能用c语言中指针的概念去理解,Python的变量就像一个标签,就一个名字而已,贴哪是哪,指哪打哪,呃,画个图;
为什么说不能用指针的概念理解:
>>> old=[1,2,3,4,5]
>>> new=old
>>> old=[6]
>>> old
[6]
>>> new
[1, 2, 3, 4, 5]
如果用指针理解,new现在就是old,old改变,new也应该改变;
但在python中不是这样。python中没有变量,只有名字。所谓名字,是把内容放进去,【1,2,3,4,5】的名字一开始叫old,后来叫做new。【6】后来叫做old。所以喊old,【6】答到;喊new,【1,2,3,4,5】答到。
-------------------------------------------------------课后--------------------------------------------------------------------------------------------------
0. 下边的列表分片操作会打印什么内容?
>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list1[2:5]
[2,9,7]
1.请问 list1[0] 和 list1[0:1] 一样吗?
不一样,list1[0]返回第0个元素的值,list1[0:1]返回一个只含有第0个元素的列表
2.如果你每次想从列表的末尾取出一个元素,并将这个元素插入到列表的最前边,你会怎么做?
list1.insert(0,list1.pop())
3. 有些鱼油比较调皮,他说我想试试 list1[-3:-1] 会不会报错,怎么知道一试居然显示 [9, 7],这是怎么回事呢?
答:Python 的列表很聪明,竟然支持负数索引,如图:
正常索引从左到右索引,负数索引是从右到左
4.在进行分片的时候,我们知道分片的开始和结束位置需要进行指定,但其实还有另外一个隐藏的设置:步长。
list1[0:6:2]
[1,2,7]
1)简洁分片操作:
list1[::2]
[1,2,7]
2)步长不能为0,会报错
5.列表的复制
list1=[1,3,2,4]
list2=list1[:]
list3=list1
print(list1,list2,list3)
list1.sort()
print(list1,list2,list3)
list1=[1,2,3,4]
list2=[1,3,2,4]
list3=[1,2,3,4]
---------------------------------------------------------------------------------------------------
12
1、列表大小的比较(有点绕)
从第一个元素顺序开始比较,如果相等,则继续,返回第一个不想等元素比较的结果。如果所有元素比较均相等,则长的列表大,一样长则两列表相等
>>> member=[1,2,3,4,5,6]
>>> member2=[2,5,6,7,1,4]
>>> member<member2
True
>>> member>member2
False
2、一些列表的操作
①list*=3#列表中元素重复三遍
②in 和not in
>>> list=[1,2,3,4,5]
>>> 1 in list
True
>>> 5 not in list
False
③访问列表中列表的元素
>>> list=[1,2,3,[4,5],6]
>>> 4 in list
False
>>> list[3][1]
5
④列表的内置函数
>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
常用函数:
(1)count(内容)#判断内容在列表中出现次数
>>> list=[1,2,3,4,5,6,7,3,3]
>>> list.count(3)
3
(2)index(内容)#找到该内容的序列数,若出现多次,则返回第一次的序列数
index(内容,起始位置,末位置)#找到从起始位置到末位置的该内容序列数
>>> list=[1,2,3,4,5,6,7,3,3]
>>> list.index(3)
2
>>> list.index(3,4,8)
7
(3)reverse()#翻转,倒置
(4)sort()#默认从小到大排序
list.sort(reverse==true)#从大到小排序
-----------------------------------------------------12课后题-------------------------------------------------------
1. 请问如何将下边这个列表的'小甲鱼'修改为'小鱿鱼'?
list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
list1[1][2]=['小鱿鱼']
2. 要对一个列表进行顺序排序,请问使用什么方法?
列表名.sort()
3. 要对一个列表进行逆序排序,请问使用什么方法?
列表名.sort()
列表名.reverse()
或 列表名.sort(reverse=True)
4. 列表还有两个内置方法没给大家介绍,不过聪明的你应该可以自己摸索使用的门道吧:copy() 和 clear()
list1=[1,2,3,4]
list1.clear() #clear()不添加参数
print(list1)----[]
list2=list1.copy()
print(list2)-----[1,2,3,4]
5. 你有听说过列表推导式或列表解析吗?
列表推导式(List comprehensions)也叫列表解析,灵感取自函数式编程语言 Haskell。Ta 是一个非常有用和灵活的工具,可以用来动态的创建列表,语法如:
[有关A的表达式 for A in B]
相当于
list1 = []
for x in range(10):
list1.append(x**2)