【有书共读11】零压力学Python读书笔记03
第五章
列表:
- 列表是有序的集合,创建方法使用[];
>>>mylist=[] #创建一个空列表 >>> mylist1=[1,2,3] #创建一个列表,列表的初始有 1 2 3 三个元素 >>> print(mylist1) [1, 2, 3]
- 向列表添加元素 append()方法-------每次都添加在列表的末尾
>>> mylist=[] #创建一个空列表 >>> print(mylist) [] >>> mylist.append(1) #向这个列表中添加元素1 >>> print(mylist) [1] >>> mylist.append('hello') #向这个列表中继续添加元素‘hello’ >>> print(mylist) [1, 'hello']
- 列表的复制与创建别名
#列表的复制 >>> num_list1=[1,2,3,4] >>> num_list2=num_list1[:] #将num_list1的元素都复制到num_list2 >>> print(num_list1) [1, 2, 3, 4] >>> print(num_list2) [1, 2, 3, 4] >>> print(num_list1==num_list2) #判断这两个列表是否相等 True >>> num_list1.append(5) >>> print(num_list1==num_list2) #判断改变num_list1之后这两个列表是否相等 False #列表的别名 >>> num_list1=[1,2,3,4] >>> num_list3=num_list1 #这里是创建别名,不是复制 >>> print(num_list1==num_list3) #判断这两个列表是否相等 True >>> num_list1.append(5) #改变num_list1的值 >>> print(num_list1==num_list3) #判断改变num_list1这两个列表是否相等 True
我们需要区别列表的复制和别名的区别,这里的别名就类似与c++的引用 - 列表元素的排序-----sort()
>>> mylist=[5,6,10,61,23,95,15,30,1,-5] >>> mylist.sort() >>> print(mylist) [-5, 1, 5, 6, 10, 15, 23, 30, 61, 95] >>> mylist.sort(reverse=True) >>> print(mylist) [95, 61, 30, 23, 15, 10, 6, 5, 1, -5]
- 列表元素的删除-----remove() 和关键字 in
>>> mylist=[5,6,10,61,23,95,15,30,1,-5] >>> print(mylist) [5, 6, 10, 61, 23, 95, 15, 30, 1, -5] >>> mylist.remove(23) >>> print(mylist) [5, 6, 10, 61, 95, 15, 30, 1, -5] >>> #如果删除的元素没有在列表里面,那么就会报错 >>> mylist.remove(100) Traceback (most recent call last): File "<pyshell#68>", line 1, in <module> mylist.remove(100) ValueError: list.remove(x): x not in list >>> #所以我们需要判断元素是否在列表里面,用到关键字 in >>> 5 in mylist True >>> 200 in mylist False >>> #所以我们可以配合if语句来删除元素,以保证不会出错 >>> if 61 in mylist: mylist.remove(61) >>> print(mylist) [5, 6, 10, 95, 15, 30, 1, -5]
- 在列表中,元素的排列顺序是有意义的,重复的值也是-----类似于数组
- 可以使用关键字 for 来遍历列表
>>> #for 从本质上讲就是一个for each 语句 >>> #语法结构 >>> mylist=[5,6,10,61,23,95,15,30,1,-5] >>> for i in mylist: print(i,end=' ') 5 6 10 61 23 95 15 30 1 -5 >>> #注意第一行末尾的冒号: for以内的语句要缩进
- 索引和切片;
>>> #对于长度为N的列表,合法的索引为0到N-1 >>> mylist=[5,6,10,61,23,95,15,30,1,-5] >>> print(mylist[0]) #列表的第一个元素 5 >>> print(mylist[4]) #列表的第五个元素 23 >>> #在python中,负数也可以用作列表的索引、-1表示列表的最后一个元素、-2表示列表的倒数第二个元素,以此类推。 >>> print(mylist[-1]) -5 >>> print(mylist[-3]) 30 >>> #切片------生成更短的列表 >>> mylist[0:2] #取出下标从0到1的元素----注意中间是冒号: [5, 6] >>> #一些常用的切片的操作 >>> mlist=[0,1,2,3,4,5,6,7,8,9,10] >>> mlist[:5] #取列表的前五个元素 [0, 1, 2, 3, 4] >>> mlist[-6:] #取列表的前六个元素 [5, 6, 7, 8, 9, 10] >>> mlist[::2] #取偶数位置元素 [0, 2, 4, 6, 8, 10] >>> mlist[1::2] #取奇数位置元素 [1, 3, 5, 7, 9]
下面是书上的表,我觉得对理解有帮助
- 将数据复制到切片中
>>> #由于列表是可变的,因此切片既可以用来指定赋值操作的目标,也可以用来指定源 >>> m_list=[1,2,5,7] >>> m_list[:2]=[10,20,30] #用三个元素替换m_list的前两个元素 >>> print(m_list) [10, 20, 30, 5, 7] >>> #同样我们用两个元素来替换一个元素时,我们有两种方法 >>> #方法1:使用切片操作 >>> x_list=[1,2] >>> x_list[:1]=[0,0] #将第一个元素替换为[0,0]里面的两个值 >>> print(x_list) [0, 0, 2] >>> #方法2:使用索引操作 >>> y_list=[1,2] >>> y_list[0]=[0,0] #将第一个元素替换为[0,0]里面的两个值 >>> print(y_list) [[0, 0], 2] >>> #我们发现并没有达到我们想要的效果,使用索引的时候,它是将后面的整个列表作为一个元素替换掉原来列表的第一个元素 >>> #这种技巧还可用来在指定位置插入元素 >>> m_list [10, 20, 30, 5, 7] >>> #我们现在要在m_list列表的第2个元素前插入数据 >>> m_list[1:1]=[0,0] >>> print(m_list) [10, 0, 0, 20, 30, 5, 7]
- 区间--------range()函数
>>> #用法1:range(end) >>> range(10) range(0, 10) >>> #其实这里生成的列表为[0,1,2,3,4,5,6,7,8,9] >>> for i in range(10): print(i) 0 1 2 3 4 5 6 7 8 9 >>> >>> #用法2:range(start,end)-----生成的列表从start开始到end-1 ,不包含end >>> for i in range(2,10): print(i) 2 3 4 5 6 7 8 9 >>> >>> #用法3:range(start,end,step)----step为增量 >>> for i in range(2,10,2): print(i) 2 4 6 8 >>> # 在使用中,我们经常使用len函数和range函数一起使用,用来确定range生成的列表的长度 >>> len(range(10)) 10 >>> len(range(0,100,2)) 50
附图帮助大家理解
- 列表函数---len()----min()---max()
>>> #len函数返回列表长度,这个就和上面一样 >>> m_list=[1,3,5,9,3] >>> len(m_list) 5 >>> >>> #min函数返回最小值 >>> min(m_list) 1 >>> #max函数返回最大值 >>> max(m_list) 9 >>> #但要注意 min 和max 函数都只适用于列表中的任意两个元素都可以比较的大小的那种列表
附本章自己练习的代码
def function5_1_1(): ''' 函数功能:一个一个的输入名字,直接回车结束输入,程序将名字排序后输出并打印出一共输入多少个名字 ''' a_list=[] num=0 while True: m_str=input('请输入姓名:') if m_str=='': break a_list.append(m_str) num+=1 a_list.sort() print('你一共输入了{}个姓名。\n它们分别是'.format(num)) #函数优化,这里统计一共输入了多少个姓名的时候,我们其实可以不用num来计数,直接用len函数计算a_list列表的长度即可 for x in a_list: print(x) def function5_1_2(): ''' 函数功能:对上一个函数要求输出名字时,在同一行中显示 ''' a_list=[] num=0 while True: m_str=input('请输入姓名:') if m_str=='': break a_list.append(m_str) num+=1 a_list.sort() print('你一共输入了{}个姓名。\n它们分别是'.format(num)) for x in a_list: print(x,end=' ') def function5_1_3(): ''' 函数功能:让用户输入一系列数字,按数字大小(不是字典序)排序后输出 ''' a_list=[] while True: m_str=input('请输入一个数字:') if m_str=='': break a_list.append(float(m_str)) a_list.sort() for x in a_list: print(x,end=' ') def function_example_1(): ''' 埃拉托色尼筛选法---筛选质数 生成一个bool列表,值为True 说明对应的索引号为质数,为False说名对应的索引为合数 依次检查每一个数字,如果它是质数,就将它的整数倍都排除掉,即将索引值设为False 依次做下去 ''' b_list=[True]*1000 for pr in range(2,1000): if b_list[pr]: print(pr) for x in range(pr*2,1000,pr): b_list[x]=False function5_1_1() function5_1_2() function5_1_3() function_example_1()