大纲集合类型列表元组字典集合循环练习集合类型基本语法基本语法中介绍的Python基本类型都是数值类型。另一种基本类型是集合类型,主要包括列表、元组、字典和集合。其中列表和元组是一种序列。序列是一种将一系列元素按顺序组合在一起的数据结构。序列的特点是索引和切片操作。索引操作是根据编号从序列中获取一个元素,语法为方括号[编号]。切片操作是获取序列的一部分,语法为[number1:number2]。回忆一下字符串,是不是有相同的操作获取其中的一个或某个字符。所以字符串实际上是一个序列,其元素是单个字符。列表是一个有序序列,其元素可以是任何类型,编号从0到长度-1。创建列表:Python使用方括号[]表示列表。请注意,它与索引切片不同。name_list=['Green','Lucy','Lily']#字符串列表score_list=[98,67,80]#整数列表x_list=['hello',98,2.15,True]#任何类型列表y_list=[score_list,name_list]#lists列表获取列表长度:len。print(len(name_list))#listlengthindexandslice:print(score_list[1])#index,returnelementprint(x_list[0:1])#slice,returnlist输出:如何理解列表的列表?y_list=[score_list,name_list]list里面可以放任何类型的数据,放一个sequence类型肯定没问题。专业术语是二维列表,当然可以不断嵌套形成多维列表。访问方法:print(y_list[1][2])#访问多维列表通过第一个[]获取第一维列表,然后用[]获取第二维数据。相当于_name_list=y_list[1]print(_name_list[2])修改元素:可以直接赋值修改元素。name_list[2]='Kate'逻辑判断:in,notin判断列表中是否有元素。if'Green'inname_list:print('Greenishere')if'Lucy'notinname_list:print('Lucyisnothere')加法和乘法:加号(+)将两个列表组合成一个新列表.#加法x=[1,3,2]y=[4,6,5]z=x+yprint(x+y)输出:乘号(*)将复制原始列表以生成新列表。#乘法x=[1,2,3]z=x*3print(z)输出:最大值和最小值:max,min。x=[1,2,3]print(max(x))print(min(x))输出:如果列表中的元素必须是可比较的。可以使用字符串列表吗?整理:整理。将列表中的元素从小到大排序。#Sortx=[1,2,4,5,3,2]x.sort()print(x)output:flippedlist:reverse.翻转列表,回到前面。x.reverse()反转上面的排序得到index:index,得到一个元素在列表中第一次出现的位置。x=[1,2,3,2]i=x.index(2)print(i)2第一次出现在位置1,所以输出1。当元素不存在时,此方法会抛出错误。可以先判断是否存在,再做索引。或者使用后面介绍的try和except来处理。if9inx:i=x.index(9)print(i)统计元素个数:count。x=[1,2,4,5,3,2]print(x.count(2))x列表中的元素2出现了2次,所以该方法返回2。最后添加:append,extend。两者都是在末尾添加,区别在于append添加元素,extend添加列表。x=[1,2,3]x.append(100)print(x)x.extend([200,300])print(x)输出:extend的效果相当于x=x+[200,300]插入元素:插入。在列表的某个位置插入一个元素,insert(position,element)x=[1,2,3]x.insert(0,0)x.insert(2,100)print(x)output:xlist在位置0(即列表的开头)插入一个0,然后在位置2插入一个100。删除:remove、del、pop、clear。remove删除第一个出现的元素,如果不存在,会报和index一样的错误。del是根据索引位置删除。当索引超出范围时,会报错。pop删除最后一个元素并将其返回。clear删除所有列表元素。x=[1,2,3,2]x.remove(2)#删除前2个元素delx[1]#删除位置1的元素p=x.pop()#删除后2个,同时pAssigned2x.clear()#删除所有元素tuple元组和列表的区别在于元组是不可变的序列,其他都和列表一样。元组具有对序列的一般操作,但不存在使序列发生变异的方法。创建一个元组:Python使用圆括号()来表示一个元组。只有一个元素时,加一个逗号。a=(1,)#只有一个元素的元组b=(1,3,4)#元组序列的常见操作:print(len(a))#长度print(b[1])#索引print(b[0:2])#切片print(max(b))#最大值print(min(b))#最小值print(2inb)#在输出中:元组和列表之间的转换:列表,元组。tuple([1,2,3])#转为元组list((1,2,3))#转为列表拆包:拆包是将元组或列表中的所有元素一一赋值给多个变量。x=('a','b','c')a,b,c=xprint(a,b,c)输出:a,b,c三个变量用逗号隔开,依次赋三个值在一个x元组中。变量的数量必须与元组的长度相同。字典字典是无序结构,也可以包含任何类型的元素。与使用0、1、2...进行有序索引的列表不同,字典使用自定义键进行索引。Key-value结构:key表示用于索引的关键字,value表示存储的元素。【键值对】创建字典:用花括号{}把字典包裹起来,每个键值对之间用逗号分隔,键值对中的键和值之间用冒号分隔,前面是key,后面是value。user={'name':'Green','age':12,'gender':'male'}可以写成一行user={'Green':80,'Lily':90,'Lucy':76}也是可以的,但是大多数情况下分行写会更清楚。取值方式:也是通过[]来完成,但是可以通过将列表中的数字替换为key值来获取值。print(user['name'])key不存在时会报错。安全值:get,如果key不存在,使用get方法避免报错,返回空值None。address=user.get('address')#ReturnNone,因为没有addresskeyname=user.get('name')#ReturnGreen添加修改:直接赋值。user['address']='china'#添加地址键值对user['age']=18#年龄改为18delete:del.deluser['gender']#删除性别键值对Clear:清除。user.clear()#清除所有键值对,判断key:in是否存在。if'age'inuser:#判断age是否在user中print(user['age'])获取所有内容字典:键、值、项目。print(user.keys())#获取所有键值print(user.values())#获取所有值值print(user.items())#获取所有键值对output:输出值不是列表,可以使用list方法转成列表,使用方便。复杂结构:通过字典和列表的相互嵌套,实现实际开发中常用的结构。users=[{'name':'Green','age':12,'like':['apple']},{'name':'Lucy','age':13,'like':['apple','pear']},{'name':'Lily','age':11,'like':['orange','melon']}]获取用户的第一个最爱。print(users[1]['like'][0])通过多次[]抽取,最终抽取用户1[Lucy]的第一个偏好。集合是由键组成的一组数据。与字典的区别在于没有值,与列表的区别在于每个元素键不能重复。在数学中可以进行交、并、差等运算,在特定场合是一种非常方便的数据结构。创建一个集合:和字典一样,用大括号{}表示一个集合,但不需要取值。set1={'apple','orange','melon'}set2={'apple','pear'}列表去重:使用set方法将列表转化为集合,可以方便的对列表进行去重。print(set([1,3,3,4]))#list去重print(set('class'))#string也是一种序列输出:输出结果自动删除重复值,然后就可以了然后用list转成list,就是去重后的list。交集:set1&set2,计算两个集合中相同的元素。联盟:set1|set2,计算两个集合的所有唯一元素。差分集:set1–set2,计算set1中不在set2中的元素。对称差:set1^set2,统计只存在于set1或set2中的元素。set1={'apple','orange','melon'}set2={'apple','pear'}print(set1&set2)#intersectionprint(set1|set2)#unionprint(set1-set2)#Differencesetprint(set1^set2)#对称差集输出:添加元素:add.s={'apple','orange'}s.add('pear')移除元素:remove、discard、pop、clear。s.remove('apple')#如果元素不存在,会报错。s.discard('apple1')#更安全的删除,即使不存在也不会报错x=s.pop()#随机删除集合中的一个元素并返回s.clear()#删除该集合中的元素判断所有元素的子集和超集:issubset,issuperset。set1={'a','b','c'}set2={'a'}#set2是set1的子集,set1是set2的超集set2.issubset(set1)#returnTrueset1.issuperset(set2)#returnTrueLoop循环语句用于处理重复性工作,常用于处理列表、字典等结构。如果一个列表有几十万个元素,就需要用循环遍历所有的元素。遍历是一种从集合中逐个获取元素的操作。for循环:for,in.names=['Green','Lucy','Lily']fornameinnames:print('HappyBirthday,{}'.format(name))输出:用for开始一个循环,而in后面的名字表示要遍历的列表。for后面的名字是一个临时变量,用来存放遍历过程中的每一个元素。从0到N-1的元素依次赋值给临时变量,后面的代码块重复执行N次。(N等于列表的长度)编写一个程序,计算列表中所有元素的总和。numbers=[10,53,45,44,907]#要计算的列表answer=0#总和初始化为0foriinnumbers:#开始循环answer=answer+i#一个一个相加print(答案)每个循环我都会被分配一个数字值。将i添加到当前答案并将结果分配给答案。每次循环都会更新答案,当循环结束时,它就是列表的总和。sum方法也可以完成这个功能,比较结果。sum(numbers)到这里我们就初步了解了这个方法是干什么的。停止循环:中断。当for循环代码块中出现break时,for循环将停止。一般我们会配合条件判断来使用,在满足条件后停止循环。让我们一起实现一个索引函数。[返回第一次出现的位置,不存在则返回-1]numbers=[10,53,45,44,907]i=0#记录当前遍历的位置index=-1#结果为-1默认存在fornumberinnumbers:ifnumber==53:#满足条件index=i#赋值位置break#停止循环i=i+1#position+1print(index)wherei记录当前遍历的位置,所以在每次循环执行结束时加1。如果你打印出i的值,你会发现i停在满足条件的位置,也就是循环停止。打破循环:继续。如果循环中出现continue,则循环停止,立即进行下一个循环。下面我们还是实现一个求和的功能,但是如果数字大于100,就不统计了。numbers=[10,53,45,44,907]answer=0foriinnumbers:ifi>100:continue#立即开始下一个循环answer=answer+iprint(answer)大于100时跳过,没有添加。也许你发现了这个功能不用continue也可以实现。ifi<=100:answer=answer+i,所以continue出现率不高,一般在逻辑极其复杂的时候非常有用。while循环:while。while循环是根据一个条件判断是否继续循环。names=['Green','Lucy','Lily']i=0#索引位置从0开始whilei
