当前位置:   article > 正文

【python学习7】组合数据类型_组合数据类型的访问

组合数据类型的访问

(一)序列

1,序列的索引

len()函数可计算字符串的字符个数 

注意正向和反向的索引序号

 2,序列的相关操作 

 (1)切片操作

 

 切片的各个参数:start,end,step

 注意各参数的含义和默认值

  1. s="helloworld"
  2. s1=s[0:5:1] #指定起始和结束位置以及步长
  3. print(s1) #输出为hello

(2)序列的相关操作_操作符_函数 

 序列相加:要求序列类型相同(序列的类型有列表、元组、集合、字典和字符串),元素的   类型可以是字符型或整型。理解序列类型和序列中的元素类型

(二)列表 

1,列表的创建与删除 

 列表是可变长序列,因为其可以增加、删除元素

  1. #列表的创建
  2. #直接使用[]创建
  3. lst=["hello","world",99.8,] #变量名为lst不是list,因为list是内置函数
  4. #使用内置函数list()创建
  5. lst2=list("hello") #结果为["h","e","l","l","0"]
  6. lst3=list(range(1,10,2)) #从1开始,到10结束(不包括10)且步长是2,输出结果为[1,3,5,7,9]
  7. #列表中的操作
  8. print(lst2+lst3) #结果为["h","e","l","l","0",1,3,5,7,9]
  9. print(lst2*3) #结果为["h","e","l","l","0","h","e","l","l","0","h","e","l","l","0"]
  10. print(len(lst2))
  11. print(max(lst3)) #序列的操作同样适用
  12. print(min(lst3))
  13. #列表的删除
  14. del lst #删除列表,则列表不存在
  15. del lst2
  16. del lst3

 2,列表元素的遍历

 

  1. #使用for循环遍历列表元素
  2. lst=["hello","world","python","php"]
  3. for item in lst:
  4. print(item)
  5. #使用for循环,range()函数,len()函数,根据索引进行遍历元素
  6. for i in range(len(lst)):
  7. print(i,"-->",lst[i])
  8. #使用for循环,enumerate()函数进行遍历
  9. for index,item in enumerate(lst): #默认index序号从0开始
  10. print(index,item)
  11. for index,item in enumerate(lst,1): #修改index序号从1开始
  12. print(index,item)

 3,列表元素的新增_修改_删除操作

 

  1. lst=["hello","python","php"]
  2. print("原列表:",lst,id(lst)) #id()函数表示该地址,输出为原列表:["hello","python","php"]
  3. #使用insert(index,x)在指定位置插入元素
  4. lst.insert(1,100) #在位置1处插入元素100(默认位置从0开始)
  5. #删除元素
  6. lst.remove("hello")
  7. #使用pop(index),根据索引移出元素,先将元素取出,再将元素删除
  8. lst.pop(1) #该语句直接在窗口输出100
  9. #清空列表所有元素
  10. lst.clear()
  11. #将列表中元素的位置反转
  12. lst.reverse()
  13. #列表的拷贝,并产生新的列表
  14. new_lst=lst.copy() #两个列表的内存地址不一样
  15. #列表元素的修改
  16. lst[1]="mysql"

 4,列表的排序

 

sort方法:reverse=True,则降序排序;False是升序排序,默认是升序排序对

sorted函数:是内置函数

注意sort()是方法,而sorted()是内置函数

对中文的排序效果不是很好,但可以对英文排序,按照首字母的unicode码值进行排(ASCII码是unicode码的一部分)

  1. #用sort()方法进行排序
  2. lst=[5,15,46,3,59,62]
  3. lst.sort() #默认是升序排序
  4. lst.sort(reverse=True) #降序排序
  5. #对英文排序
  6. lst2=["banana","apple","Cat","Orange"]
  7. lst2.sort() #默认升序排序,先排大写再排小写(按照首字母的unicode码排序)
  8. lst2.sort(reverse=True) #降序排序,先排小写在排大写
  9. #忽略大小写进行排序
  10. lst2.sort(key=str.lower) #默认升序排序且部分大小写,用到参数key(是比较排序的键)
  1. #用sorted()内置函数进行排序
  2. lst=[5,15,23,86,3,87]
  3. asc_lst=sorted(lst) #默认是升序排序
  4. print(lst)
  5. print(asc_lst) #输出会发现lst未改变,asc_lst排序改变
  6. #sorted()函数的参数和sort()方法相同,可采用一样的形式

5,列表生成式 

expression是表达式的意思,即前面的可以是任何表达式 

  1. #列表生成式
  2. #生成整数列表
  3. lst=[i for i in range(1,11)]
  4. lst1=[i*i for i in range(1,11)] #前面是表达式
  5. #产生10个随机数列表
  6. import random #要产生随机数要导入random模块
  7. lst3=[random.randint for _ in range(10)] #因为前面没有用到循环变量,所以用下划线代替则该循环表示循环的次数
  8. #从列表中选择符合条件的元素组成新的列表
  9. lst4=[i for i in range(10) if i%==0] #产生0~9之间的偶数列表

 6,二维列表

  1. #创建二维列表
  2. lst=[["城市","环比","同比"],
  3. ["北京",102,103],
  4. ["上海",104,504],
  5. ["深圳",103,205]
  6. ]
  7. #遍历二位列表
  8. for row in lst
  9. for item in row
  10. print(item,end="\t")
  11. print()
  12. #列表生成式创建四行五列的列表
  13. lst2=[[j for j in range(5)]for i in range(4)]
  14. print(lst2) #输出是[[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4]]
  15. #也可效仿一维列表生成式添加条件筛选

(三)元组

1,元组的创建与删除 

元组是不可变序列

元组中的数据类型可以是字符串、整型、也可以是列表,元组

  1. #直接使用()创建元组
  2. t=("hello","python",[0,1,2],10)
  3. print(t) #输出是("hello","python",[0,1,2],10),输出中带有()
  4. #使用内置函数tuple()创建元组
  5. t=tuple("hello")
  6. print(t) #输出为("h","e","l","l","o")
  7. t=tuple([1,2,3])
  8. print(t) #输出是(1,2,3)
  9. t=tuple(range(1,5))
  10. print(t) #输出是(1,2,3,4)
  11. #元组的相关操作和序列的操作一样
  12. #若元组中只有一个元素,括号中应带“,”
  13. z=(10)
  14. print(type(z)) #输出<class:int>
  15. m=(10,)
  16. print(type(m)) #输出<class:tuple>
  17. #删除元组
  18. del m
  19. print(m) #报错:nameerror:m is not defined

2,元组的访问与遍历

  1. t=("python","php","hello")
  2. print(t[0]) #输出为python,根据索引访问
  3. t1=t[0:3:1]
  4. print(t1) #输出是("python","php","hello"),切片操作
  5. #元组的遍历
  6. #1,直接使用for循环遍历
  7. t=("python","php","hello")
  8. for item in t:
  9. print(item)
  10. #2,for循环+range()+len()组合遍历
  11. t=("python","php","hello")
  12. for i in range(0,len(t)):
  13. print(t[i])
  14. #3,enumerate()函数遍历
  15. for index,item in enumerate(t):
  16. print(index,item) #使用enumerate()函数时index默认从0开始

3,元组生成式

  1. t=(i for i in range(1,4))
  2. print(t) #结果是<generator object <genexpr>>生成器对象
  3. #1,生成器对象可转换成元组类型输出
  4. t=tuple(t)
  5. print(t) #输出(1,2,3)
  6. #2,生成器对象可以直接只用for循环遍历,不用转成元组类型
  7. for item in t:
  8. print(item)
  9. #3,生成器对象方法__next__()方法遍历
  10. print(t.__next__()) #拿到第一个元素
  11. print(t.__next__()) #拿到第二个元素
  12. print(t.__next__()) #拿到第三个元素
  13. t=tuple(t)
  14. print(t) #输出会发现元素为空
  15. #生成器遍历之后,再想重新遍历必须重新创建一个生成器对象,因为遍历之后原生成器对象不存在

注意:生成器遍历之后,再想重新遍历必须重新创建一个生成器对象,因为遍历之后原生成器对象不存在

4,元组和列表的区别

 1,列表时可变序列,可进行添加删除操作;元组是不可变序列。

 2,列表是可变序列故不能作为字典的键;元组是不可变序列可作为字典的键

 3,当只需要访问元素而不修改元素时,用元组

(四)字典

1,字典创建与删除

字典没有索引,只能通过键来访问 

字典中的键必须是不可变序列,值可以是任意类型

字典是可变序列,可以添加和删除元素

字典的删除:del 字典名 

  1. #1,直接使用{}创建
  2. d={10:"car",20:"dog",30:"pet"}
  3. #2,映射函数zip()函数结合dict()使用
  4. lst1=[10,20,30,40]
  5. lst2=["cat","dog","car","zoo"]
  6. ziph=zip(lst1,lst2) #映射函数的结果是zip对象
  7. #zip()函数将两个列表中对应位置的元素作为元组结合,并产生zip对象
  8. #print(ziph) #输出是<zip object>
  9. #print(list(ziph)) #zip对象需转化成列表或元组才能输出
  10. d=dict(ziph)
  11. print(d) #输出是{10:"cat",20:"dog",30:"car",40:"zoo"}
  12. #3,使用dict()并用参数创建字典
  13. d=dict(cat=10,dog=20,car=30) #括号若写成10=cat则报错因为变量不能是数字
  14. print(d) #输出是{"cat":10,"dog":20,"car":30}
  15. t=(10,20,30)
  16. m={t:10} #键必须是不可变序列
  17. print(m) #输出是{(10,20,30):10}
  18. n=[10,20,30]
  19. m={n:10}
  20. print(m) #报错typeError:unhashable type:"list"
  21. #删除字典
  22. del m #删除后就不存在
  23. del n

 2,字典的访问和遍历

字典元素遍历:方法items()指的是键值对 

  1. d={"hello":10,"world":20,"php":30}
  2. #访问字典元素
  3. #1,使用[key]
  4. print(d["hello"])
  5. #2,使用d.get(key)
  6. print(d.get("hello"))
  7. #[key]和d.get(key)的区别,若键不存在时会出现区别
  8. #print(d["java"]) 直接报错:KeyError键错误
  9. print(d.get("java")) #不会报错,输出None,d.get("java")默认值None
  10. print(d.get("java","不存在")) #输出默认值不存在
  11. #字典的遍历
  12. for item in d.items():
  13. print(item) #输出是元组形式,即("hello",10)形式,因为items是键值对形式
  14. for key,value in d.items():
  15. print(key,value) #输出对应的值

 3,字典的相关操作

  1. d={1001:"李梅",1002:"王华",1003:"张锋"}
  2. #向字典中添加数据
  3. d[1004]="张丽" #直接使用d[key]=value赋值运算,添加数据
  4. #获取字典中所有的key
  5. key=d.keys() #d.keys()结果是dict_keys,python中的一种内部数据类型,专用于表示字典的key
  6. #若希望更好的显示数据,可用list()或tuple()转为列表或元组
  7. print(list(key))
  8. print(tuple(key))
  9. #获取字典中所有的value
  10. value=d.values() #d.values()结果是dict_values
  11. print(list(value))
  12. print(tuple(value))
  13. #使用pop()方法
  14. print(d.pop(1008,"不存在")) #若键不存在,输出默认值“不存在”
  15. #清除字典
  16. d.clear()
  17. print(bool(d)) #输出False

4,字典生成式

  1. #使用指定范围的数做键key
  2. import random
  3. d={item:random.randint(1,100) for item in range(4)}
  4. print(d) #输出{0:39,1:25,2:45,3:56}
  5. #使用映射函数zip()作为生成表达式
  6. lst1=[1001,1002,1003]
  7. lst2=["刘伟","张强","李华"]
  8. d={key:value for key,value in zip(lst1,lst2)}
  9. print(d)

(五)集合

1,集合的创建与删除

 集合中的元素不能重复,若重复则自动降重,可实现字符串的降重

本博客只叙述可变集合set

  1. #第一种创建集合方法
  2. s={10,20,30,40]
  3. print(s) #输出为{40,10,20,30},因为集合是无序的
  4. s={[10,20],[30,40]}
  5. print(s) #报错TypeError,因为列表是可变的
  6. s={} #创建的是空字典
  7. s=set() #创建的是空集合
  8. #第二种创建集合,set(可迭代对象),可迭代对象就是能用for循环遍历的类型
  9. s1=set("hello")
  10. s2=set([10,20,30])
  11. s3=set(range(1,10))
  12. print(s1) #输出{"h","l","o","e"},集合中的元素不能重复,可实现字符串的去重
  13. print(s2)
  14. print(s3)
  15. del s1 #删除s3

 2,集合的操作符

  1. a={10,20,30,60}
  2. b={20,30,40,80}
  3. print(a&b) #输出是{20,30},仍为集合
  4. print(a|b) #输出仍是集合
  5. print(a-b)
  6. print(a^b) #补集,即去掉a和b中重复的元素后剩下的所有元素

 3,集合的相关操作,遍历和生成式

  1. s={10,20,30}
  2. #添加元素
  3. s.add(100) #结果是{100,10,20,30}
  4. #删除元素
  5. s.remove(20)
  6. #清除集合中所有元素
  7. s.clear()
  8. #遍历集合元素
  9. for i in s:
  10. print(i)
  11. #使用ennumerate()函数遍历
  12. for index,value in ennumerate(s,1): #index是序号,不是索引
  13. print(index,value)
  14. #集合生成式
  15. s={i for i in range(1,10)}
  16. m={i for i in range(1,10) if i%2==0}

 (六)组合数据类型的总结

实战小任务

  1. #千年虫
  2. lst=[88,89,90,98,00,99] #表示员工的两位整数的出生年份
  3. #遍历列表
  4. for index in range(len(lst)):
  5. if str(lst[index])!="0":
  6. lst[index]="19"+str( lst[index])#拼接之后再赋值
  7. else:
  8. lst[index]="200"+str( lst[index])
  9. #使用enumerate()函数遍历列表
  10. for index,value in enumerate(lst):
  11. if value!=0:
  12. lst[index]="19"+str(value)
  13. else:
  14. lst[index]="200"+str(value)
  1. #模拟京东购物流程
  2. #创建列表,用来存放入库的商品信息
  3. lst=[]
  4. for i in range(1,6):
  5. goods=input("输入商品编号和商品名称,每次输入一件")
  6. lst.append(goods)
  7. #输出所有的商品信息
  8. for item in lst:
  9. print(item)
  10. #创建空列表,用来存放购物车的商品
  11. cart=[]
  12. while True:
  13. flag=False
  14. num=input("请输入要购买的商品编号")
  15. #遍历商品列表,查询购买的商品是否存在
  16. for item in lst:
  17. if num==item[0:4]
  18. cart.append(item)
  19. print("商品已添加到购物车")
  20. break
  21. if flag==False and num!="q":
  22. print("该商品不存在")
  23. if num="q":
  24. break
  25. print("购物车已选择的商品为")
  26. #反向
  27. cart.reverse()
  28. for item in cart:
  29. print(item)
  1. #模拟12306购票流程,字典的应用
  2. #创建字典,用来存储车票信息,车次做key,使用其他信息做value
  3. dict_ticket={"G1569":["北京南-天津北""18:06","18:39"],"G1567":["北京南-天津南""18:15","18:50"],"G1845":["北京南-天津西""18:13","18:36"],"G1902":["北京南-天津东""18:23","18:56"]}
  4. #遍历字典元素
  5. for key in dict_ticket.keys():
  6. print(key,end="")
  7. #遍历车次详细信息
  8. for item in dict_ticket.get(key):#根据key获取值,dict_ticket[key]
  9. print(item,end="")
  10. print()
  11. #输入用户的购票车次
  12. train_no=input("输入用户购买的车次")
  13. #根据键获取值
  14. info=dict_ticket.get(train_no,"车次不存在")#get()方法若没有对应的key,则输出默认参数"车次不存在"
  15. if info!="车次不存在":
  16. person=input("输入乘车人")
  17. #获取车次详细信息
  18. s=info[0]+" "+"开"+info[1]
  19. print("已购买"+train_no + person + s + "换取车票【铁路12306】")
  20. else:
  21. print("车次不存在")
  1. #模拟手机通讯录,集合的应用
  2. #创建空集合
  3. phones=set()
  4. for i in range(5):
  5. info=input("请输入第"+str(i)+"位人间好友")
  6. #添加到集合中
  7. phones.add(info)
  8. for item in phones:
  9. print(item)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/123025
推荐阅读
相关标签
  

闽ICP备14008679号