1、17.1 列表 列表是包含若干元素的有序连续内存空间。在形式上,列表的所有元素放在一对中括号中,相邻元素之间使用逗号分隔。在 Python 中,同一个列表中元素的数据类型可以各不相同,同一个列表中可以同时包含整数、实数、字符串等基本类型的元素,也可以包含列表、元组、字典、集合及其他任意对象,若只有一对方括号而没有任何元素则表示空列表。27.1.1列表创建与删除 a_list=董付国,副教授,41,男 a_list=#创建空列表 list(3,5,7,9,11)#将元组转换为列表3,5,7,9,11 list(range(1,10,2)#将 range 对象转换为列表1,3,5,7,9 list
2、(hello world)#将字符串转换为列表h,e,l,l,o,w,o,r,l,d list(3,7,5)#将集合转换为列表3,5,7 d=a:3,b:9,c:78 list(d)#将字典的 键 转换为列表a,b,c list(d.values()#将字典的 值 转换为列表3,9,78 list(d.items()#将字典的元素对转换为列表(a,3),(b,9),(c,78)x=list()#创建空列表37.1.2列表元素访问 x=list(Python)#创建列表对象 xP,y,t,h,o,n x0#下标为 0 的元素,第一个元素P x-1#下标为-1 的元素,最后一个元素n47.1.3列
3、表常用方法5方法方法说明说明append(x)将x追加至当前列表尾部clear()删除当前列表中所有元素count(x)返回x在当前列表中出现的次数extend(L)将列表L中所有元素追加至当前列表尾部index(x)返回当前列表中第一个值为x的元素的索引,若不存在值为x的元素则抛出异常insert(index,x)在当前列表index位置处插入x,该位置后面的所有元素后移并且在列表中的索引加1pop(index)在当前列表中删除并返回列表中下标为index的元素,index默认值为-1,也就是删除并返回最后一个元素remove(x)在当前列表中删除第一个值为x的元素,该元素之后的所有元素前移
4、,在列表中的索引减1,如果列表中没有值为x的元素则抛出异常reverse()对当前列表所有元素进行原地翻转sort(key=None,reverse=False)对当前列表中的元素进行排序,key用来指定排序规则,reverse为False表示升序,True表示降序7.1.3列表常用方法(1)append()、insert()、extend()x=1,2,3 x.append(4)#在尾部追加元素 x.insert(0,0)#在指定位置插入元素 x.extend(5,6,7)#在尾部追加多个元素 x0,1,2,3,4,5,6,767.1.3列表常用方法(2)pop()、remove()、cle
5、ar()x=1,2,3,4,5,6,7 x.pop()#弹出并返回尾部元素7 x.pop(0)#弹出并返回指定位置的元素1 x.clear()#删除所有元素 x x=1,2,1,1,2 x.remove(2)#删除首个值为2的元素 x1,1,1,2 del x3#删除指定位置上的元素 x77.1.3列表常用方法(3)count()、index()x=1,2,2,3,3,3,4,4,4,4 x.count(3)#元素3在列表x中的出现次数3 x.index(5)#列表x中没有5,抛出异常ValueError:5 is not in list87.1.3列表常用方法(4)sort()、revers
6、e()x=list(range(11)#包含11个整数的列表 import random random.shuffle(x)#把列表x中的元素随机乱序 x6,0,1,7,4,3,2,8,5,10,9 x.sort(key=lambda item:len(str(item),reverse=True)#按转换成字符串以后的长度,降序排列 x10,6,0,1,7,4,3,2,8,5,9 x.sort(key=str)#按转换为字符串后的大小,升序排序 x0,1,10,2,3,4,5,6,7,8,9 x.sort()#按默认规则排序 x0,1,2,3,4,5,6,7,8,9,10 x.reverse
7、()#把所有元素翻转 x10,9,8,7,6,5,4,3,2,1,097.1.4列表对象支持的运算符(1)加法运算符+可以把两个列表连接为一个新列表,该运算符也适用于元组和字符串。1,2,3+4#连接两个列表,返回新列表1,2,3,4107.1.4列表对象支持的运算符(2)乘法运算符*可用于列表和整数相乘,表示序列复制,返回新列表,该运算符也适用于元组和字符串。1,2,3,4*2#序列复制,返回新列表1,2,3,4,1,2,3,4117.1.4列表对象支持的运算符(3)成员测试运算符 in 可用于测试列表中是否包含某个元素,也适用于元组、字符串、字典、集合及 map、zip、filter 类似
8、的对象和生成器对象。3 in 1,2,3True 3 in 1,2,3False127.1.5内置函数对列表的操作 x=list(range(11)#生成列表 import random random.shuffle(x)#随机打乱列表中元素的顺序 x0,6,10,9,8,7,4,5,2,1,3 all(x)#测试是否所有元素都等价于TrueFalse any(x)#测试是否存在等价于True的元素True max(x)#返回最大值10 max(x,key=str)#返回转换成字符串之后最大的元素#并不把元素真的转换成字符串9137.1.5内置函数对列表的操作 min(x)#返回最小值0 su
9、m(x)#返回所有元素之和55 len(x)#返回列表中元素的个数11 list(zip(x,1*11)#多个列表的元素重新组合(0,1),(6,1),(10,1),(9,1),(8,1),(7,1),(4,1),(5,1),(2,1),(1,1),(3,1)list(zip(a,b,c,1,2)#如果两个列表不等长,以短的为准(a,1),(b,2)enumerate(x)#枚举列表元素,返回enumerate对象 list(enumerate(x)#enumerate对象可以转换为列表、元组、集合(0,0),(1,6),(2,10),(3,9),(4,8),(5,7),(6,4),(7,5)
10、,(8,2),(9,1),(10,3)147.1.6精彩例题分析与解答 例例 5-1 计算给定数据的中位数。data=1,7,2,30,1234,8,60data.sort()print(data)print(datalen(data)/2)157.1.6精彩例题分析与解答 例例5-2 编写程序,模拟报数游戏。有n个人围成一圈,顺序编号,从第一个人开始从1到k(例如k=3)报数,报到k的人退出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号。167.1.6精彩例题分析与解答from itertools import cycledef demo(lst,k):#使用切片得到原始
11、编号的副本,避免影响原来的数据 t_lst=lst:#游戏一直进行到只剩下最后一个人 while len(t_lst)1:#创建cycle对象 c=cycle(t_lst)#从1到k报数 for i in range(k):t=next(c)#一个人出局,圈子缩小 index=t_lst.index(t)t_lst=t_lstindex+1:+t_lst:index#只剩一人,游戏结束 return t_lst0lst=list(range(1,11)print(demo(lst,3)177.1.6精彩例题分析与解答 例例 5-3 编写程序,生成斐波那契数列前 20 项,并把这些数字存放到列表中。#前两项都是1fibo=1,1#生成后面的18项for i in range(18):fibo.append(fibo-1+fibo-2)print(fibo)187.1.6精彩例题分析与解答 例例 5-4 编写程序,计算一组样本数据的标准差。x=3,7,23,21,8,10avg=sum(x)/len(x)s=(xi-avg)*2 for xi in xs=(sum(s)/len(s)*0.5print(s)1922221)()()(1xxxxxxnsn