Python学习笔记【04】Python中的组合数据类型【非常重要】

【04第四章】 Python中的组合数据类型【非常重要】

在这里插入图片描述

4.1 索引

在这里插入图片描述

【代码01】4.1索引
#coding: utf-8
s='helloworld'
for i in range(0,len(s)):
    print(i,s[i])
print('-------------------------------------')
#反向递减
for i in range(-10,0):
    print(i,s[i])
4.2 序列的切片操作

在这里插入图片描述

【代码01】4.2序列的切片操作
# coding : utf-8
s='HelloWorld'
s1=s[0:5:1] #索引从0开始,到球5结束,步长为1
print(s1)
#省略开始位置start,默认从0开始
print(s[:5:1])
#省略开始位置start..省略步长step
print(s[:5])
#省略结束位置
print(s[0::1])#省略结束位置和步长
print(s[5:])#更换一下步长
print(s[0:5:2])#从0开始,到 5结束(不包含新5)步长为2
#省略开始位置和结束位置,只写步长
print(s[::2])#0,2,4,6,8位置上的元素
#步长可以为负数
print(s [ : :-1])
4.3 序列的相关操作_操作符_函数

在这里插入图片描述

【代码01】4.3序列的相关操作_操作符_函数
#coding: utf-8
s= 'Hello'
s2='World'
print(s+s2) #产生一个新的字符串序列

#注意事项目+左右的数据类型相同,序列中元素的数据类型可以不同
lst=[10,20,30,'PHP']#列表属于序列
#print(s+lst) #TypeErron: can only concatenate str (not ."Zlist" ) to str

#序列的相乘操作
print(s*5)
print( ' ---------------')
print( '*-'*20)

在这里插入图片描述

【代码02】4.3序列的相关操作_操作符_函数
# coding: utf-8
s= 'helloworld'
print( 'e在helloworld中存在吗? ',('e' in s))
print( 'v在helloworld中存在吗? ',('v' in s))

print( 'e不在helloworld中存在吗? ',('e' not in s))
print( 'v不在helloworld中存在吗? ',('v' not in s))

#内置的函数
print('len():',len(s))
print('max():',max(s))
print('min():',min(s))

#序列对象的方法..使用序列的名称,打点调用
print( 's.index() ' , s.index( 'o'))#o第一次出现的位置是索引的位置
print( 's.count()' ,s.count('o')) #统计o在字符串序列s中出现的次数
4.4 列表的创建与删除

在这里插入图片描述
在这里插入图片描述

【代码01】4.4列表的创建与删除
#coding : utf-8]
#直接使用创建
lst=[ 'hello ' , 'world' ,99.8,100]
print(lst)

#可以使用内置的ist()函数创建列表
lst2=list( 'helloworld')
lst3=list(range(1,10,2))#从1开始,到10结束(不包含10).步长为2.
print(lst2)
print(lst3)

#列表中序列中的一种,对序列操作的运算符,操作符,函数均可以使用
print(lst+lst2+lst3) #序列中的相加操作
print(lst*3)#相乘的操作
print(len(lst))
print(max(lst3))
print(min(lst3))
print(lst2.count( 'o'))#统计o的个数
print(lst2.index( 'o'))#o在列表st2中第一次出现的位置

#列表的删除操作
lst4=[10,20,30]
print(lst4)#删除列表
del lst4
print(lst4) #name 'lst4' is not defined.

4.5 列表元素的遍历

在这里插入图片描述
在这里插入图片描述

【代码01】4.5列表元素的遍历
#coding : utf-8
lst=[ 'hello' , 'world ' , 'python' , 'php' ]#使用遍历循环for遍历列表元素
for item in lst:
    print(item)

#使用for循环, range()函数,len()函数,根据索引进行遍历
for i in range(len(lst)):
    print(i, '-->',lst[i])

#使用for循环与enumerate(函数,进行遍历
for index , item in enumerate(lst): #默认序号从0开始
    print(index ,item)
print('*-'*20)
##可以修改
for index,item in enumerate(lst,10):#序号从10开始
    print(index,item)
4.6 列表元素的新增_删除_修改操作

在这里插入图片描述
在这里插入图片描述

【代码01】4.6列表元素的新增_删除_修改操作
#coding : utf-8
lst=[ 'hello' , 'world' , ' python' ]
print('原列表: ',lst,id(lst))

#新增元素的操作
#新增元素的操作
lst.append( 'sql')
print('增加元素之后',lst,id(lst))

#使用insert(index , x)在指定的位置上插入元素
lst.insert(1,100)
print(lst)

#列表元素的删除操作
lst.remove( 'world' )
print('删除元素之后的列表',lst,id(lst))
#使用pop(index)根据索引移出元素.先将元素取出,再将元素删除
print(lst.pop(1))
print(lst)

#列表反向
lst.reverse()
print(lst)

#列表的拷贝,将产生一个新的列表对象
new_lst=lst.copy()
print(lst,id(lst))
print(new_lst, id(new_lst) )

#列表元素的修改
#根据索引进行修改元素
lst[1]='mysql'
print(lst)

#清除列表中所有的元素clear
lst.clear()
print(lst,id(lst))
4.7 列表的排序操作sort方法与sorte…

在这里插入图片描述

【代码01】4.7列表的排序操作sort方法与sorte…
# coding: utf-8
lst=[4,56,3,78,40,56,89]
print('原列表: ',lst)
#排序,.默认是升序
lst.sort()  #lst.sort(reverse=False),这也是升序
print('升序:',lst)

#排序,降序
lst.sort(reverse=True)
print('降序:',lst)

print('--'*20)
lst2=['banana', 'apple', 'Cat', 'Orange']  ##注意0和O的区别
print('原列表: ' ,lst2)
lst2.sort()
print('升序:',lst2)

#降序
lst2.sort(reverse=True)
print('降序:',lst2)

print('--'*20)
#忽略大小写进行比较
lst2.sort(key=str. lower)
print('降序:',lst2)
【代码02】4.7列表的排序操作sort方法与sorte…
# coding: utf-8
lst=[4,56,3,78,40,56,89]
print('原列表: ',lst)
#排序
asc_lst=sorted(lst)
print('升序:' , asc_lst)
print('原列表:',lst)

#降序
desc_lst=sorted (lst, reverse=True)
print('升序:' , desc_lst)
print('原列表:',lst)

lst2=['banana', 'apple', 'Cat', 'Orange']  ##注意0和O的区别
#忽略大小写的排序
new_lst2=sorted(lst2,key=str.lower)
print( '原列表: ',lst2)
print( '排序后的列表:',new_lst2)
4.8 列表生成式

在这里插入图片描述
还有另外一个名字,列表推导式。

【代码01】4.8列表生成式
# coding : utf-8
import random
lst=[item for item in range(1,11)]
print(lst)
lst=[item*item for item in range(1,11)]
print(lst)

lst=[random.randint(1,100) for _ in range(10)]  ###item是循环变量,这里是随机数字用不上循环变量,因此用_表示。这里代表执行次数。
print(lst)
####  for之前叫做表达式

#从表表中选择符合条件的元素组成新的列表
lst=[i for i in range(10) if i%2==0] ##range(10)表示0-9
print(lst)
4.9 二维列表

在这里插入图片描述

【代码01】4.8 列表生成式
#coding : utf-8
#创建二维列表
lst=[
    ['城市','环比','同比'],
    ['北京',102,103],
    ['上海',104,504],
    ['深圳',100,391]
]
print(lst)
#
for row in lst:#行
    for item in row:#列
        print(item , end= '\t ')
    print()#换行

#列表生成一个四行五列
lst2=[[j for j in range(5)] for i in range(4)]  ##【ZDJ】先执行后面的,然后在执行前面的。4行5列
print(lst2)
for row in lst2:#行
    for item in row:#列
        print(item , end= '\t ')
    print()#换行
4.10 元组的创建与删除

在这里插入图片描述
列表可变,元组不可变。

【代码01】4.10元组的创建与删除
#coding : utf-8#直接使用()创建元组
t=( 'hello',[10,20,30], 'python' , 'world' )
print(t)

#使用内置tuple()创建元组
t=tuple( 'helloworld' )
print(t)

t=tuple([ 10,20,30,40])
print(t)

t=tuple(range(1,10))
print(t)

#元组的相关操作
print( '10在元组中是否存在:',(10 in t))
print( '10在元组中不存在: ',(10 not in t))
print( 'max : ' ,max(t))
print( 'min: ' ,min(t))
print( 'len: ' ,len(t))
print( 't.index : ' ,t.index(1))
print( 't.count: ' ,t.count(3))

x=(10)
print(x,type(x))
y=(10,)#元组小只有一个元素,逗号不能省,省略了就是整数类型。
print(y ,type(y))

#元组的删除
del t
print(t)  #name 't' is not defined
4.11 元组的访问与遍历
【代码01】4.11元组的访问与遍历
# coding : utf-8
t=( 'python ' , 'hello' , 'world ' )
print(t[0])#根据索引访问
t2=t[0:3:2]#元组支持切片操作
print(t2)

#元组的遍历
for item in t:
    print(item)
#for+range() +len()组合追历
for i in range(len(t)):
    print(i,t[i])

#使用enumerate()
for index,item in enumerate(t):
    print(index,'--->' ,item)
print('-'*30)
for index,item in enumerate(t,5):
    print(index,'--->' ,item)
4.12 元组生成式

在这里插入图片描述在这里插入图片描述
这是元组合列表不同的地方
在这里插入图片描述
区别:for item in t:
print(item) ##什么也没有,需要重新去生成生成器对象

【代码01】4.12元组生成式
#coding : utf-8
t=( i for i in range(1,11))  #结果是一个生成器对象,里面的东西是看不到的,继续转换才能看到
print(t)
t=tuple(t)
print(t)  #(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)  可以使用for循环遍历出来。


#coding : utf-8
t=( i for i in range(1,4))  #结果是一个生成器对象,里面的东西是看不到的,继续转换才能看到
print(t)

print('-'*30)
t=tuple(t)
print(t)  #(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)  可以使用for循环遍历出来。
for item in t:
    print(item)

print('*-'*15)
t=( i for i in range(1,4))
# __next__()方法     #也可以
print(t.__next__()) #1
print(t.__next__()) #2
print(t.__next__()) #3

print('-'*30)
t=tuple(t)
print(t)   #1-3取完后是一个空的元组。

print('-'*30)
###如果不注释掉for循环,(前面有for循环),那么
for item in t:
    print(item)    ##什么也没有,需要重新去生成生成器对象
4.13 元组与列表的区别

在这里插入图片描述
元组只能访问,不能修改,增加等

4.14 字典的创建与删除

在这里插入图片描述
在这里插入图片描述
可变序列,可以添加或删减。
在这里插入图片描述

【代码01】4.14字典的创建与删除
#coding : utf-8#(1)直接使用子创建
d={10: 'cat' , 20: 'dog' ,30: 'pet' ,20:'zoo'}  # key相同,值进行覆盖
print(d)

#zip函数的使用
lst1=[10,20,30,40]
lst2=[ 'cat' , 'dog' , 'car' , 'zoo' ]
zipobj=zip(lst1,lst2)  ##映射函数的结果是一个zip对象
#print(zipobj)
#print(list(zipobj))
print('*'*20)
d=dict(zipobj)
print(d)

#使用参数创建字典
d=dict(cat=10,dog=20) # 注意事项,参数相当于变量,变量的名字不加引号.【ZDJ】倒过来不行,10=cat会报错。
print(d)

t=(10,20,30)#创建一个元组
print({t:10})

#lst=[10,20,30]  #TypeError: .unhashable type: .'list'
#print({lst:10})  #因为列表是可变数据类型,可变数据不能做键。
#字典属于序列类型
print('max:',max(d))
print('min:',min(d))
print('len:',len(d))

#字典的删除
del d
print(d)
4.15 字典元素的访问和遍历

在这里插入图片描述

【代码01】4.15 字典元素的访问和遍历
#coding:utf-8
d={ 'hello' :10, 'world' :20, 'python' : 30}
#访问字典中的元素
#(1)使用[key]
print(d[ 'hello' ])
#..(2.)使用d .get(key)
print(d.get( 'hello'))

#二者之间是有区别的,如果Key不存在时d[key]报错,而使用get(key)可以指定默认值
# print(d[ 'java' ])   #KeyError:..'java '
print(d.get( 'java' ))  #None
print(d.get( 'java','这个值不存在'))

#字典的遍历
for item in d.items():
    print(item) #key-value组成的一个元组
#在使用于or循环遍历时,分别获取key和ivalue
for key , value in d.items():
    print(key, value)

4.16 字典的相关操作

在这里插入图片描述

【代码01】4.16字典的相关操作
# coding: utf-8
d={1001:'李梅',1002:'王华',1003:'张峰'}
print(d)
#向字典中添加数据
d[1004]='张丽丽'#直接使用赋值运算符=向字典中添加元素
print(d)

#获取字典中所有的key
keys=d.keys() # d.keys()结果是dict_keys , Python中的一种内部数据类型,专用于表示字典的key
#如果希望更好的显示数据,可以使用list或者tuple转成相应的数据类型
print(keys)
print(list(keys))
print(tuple(keys))

#获取字典中所有的value
values=d.values()  #dict_values
print(values)
print(list(values))
print(tuple(values))

#字典遍历的时用到的一个方法items
items=d.items() #dict_itemsl
print(items)
print(list(items))
print(tuple(items))

lst=list(items)#将字典中的数据转成键-值对的形式,以元组的方式进行展示
print(lst)
#直接可以使用dict函数将[(1001, '李梅'), (1002, '王华'), (1003, '张峰'), (1004, '张丽丽')]转成字典
d=dict(lst)
print(d)

#使用pop函数  ##可以指定特定值
print(d.pop(1001))
print(d)
print(d.pop(1008,'不存在'))  #如果Key不存在,结果输出默认值"不存在”

#随机删除
print(d.popitem())#先获取key-value对
print(d)

#清空字典中所有的元素
d.clear()
print(d)

#Python中一切皆对象,而每一个对象都一个布尔值,只有个别的几个值是false
print(bool(d))#空字典的bool值为False

4.17 字典生成式

在这里插入图片描述

【代码01】4.17字典生成式
# coding : utf-8
import random
d={item :random.randint(1,100) for item in range(4)}
print(d)

#创建两个列表
lst=[1001,1002,1003]
lst2=['陈梅梅','王一一','李丽丽']
d={key:value for key , value in zip(lst,lst2)}
print(d)
4.18 集合的创建与删除

在这里插入图片描述
这里只讲可变的。
在这里插入图片描述

【代码01】4.18集合的创建与删除
#coding : utf-8]#使用直接创建集合
s={10,20,30,40}  ##无序的
print(s)

#s={[10,20],[30,40]}  #TypeError: unhashable type: 'list' ##列表是可变的,因此会报错
print(s)
##如果是元组则可以,但是元组里面有列表的话也不可以。
s={(10, 20),(20,30)}
print(s)

#s={([10, 20]),([20,30])} #TypeError: unhashable type: 'list'
print(s)

s= {}#创建的是字典还是集合呢?
print(type(s)) #<class ' dict' >

#如何创建空集合
s=set()
print(type(s),bool(s))

#第二种创建集合的方式
set()
s=set( 'helloworld' )
s2=set([10,20,30])
s3=set(range(1,10))
print(s)  ## 可以去重
print(s2)
print(s3)

#集合属于序列中的一利
print('max:',max(s3))
print('min:',min(s3))
print('len:',len(s3))

print( '9在集合中是否存在? ',(9 in s3))
print( '9在集合中不存在? ',(9 not in s3))

#集合的期除
del s3
print(s3)  #NameError: name 's3' is not defined
4.19 集合的操作符

在这里插入图片描述

【代码01】4.19集合的操作符
#coding : utf-8
A={10,20,30,40,50}
B={30, 50,88,76,20}

#交集操作
print(A&B)

#并集
print(A|B)

#差集
print(A-B)

#补集
print(A^B)
4.20 集合的相关操作方法_集合的…

在这里插入图片描述

【代码01】4.20集合的相关操作方法_集合的…
#coding : utf-8
s={10,20,30}#向集合中添加元素
s.add (100)
print(s)
#删除元素
s.remove(20)
print(s)

#清除集合中所有元素
#s.clear()
#print(s, '空集合的布尔值:', bool(s))     #set() 空集合的布尔值: False

#遍历集合
for item in s:
    print(item)

for index ,item in enumerate(s,10):   #index在这里只是一个符号,不是索引。#10表示的是元素的序号,不是索引,从几开始可以自定义
    print(index,'-->',item)

#集合的生成式
s={i for i in range(10)}
print(s)   #{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}  这里是散列的顺序。
s= {i for i in range(10) if i%2}
print(s)
4.21 组合数据类型的总结

在这里插入图片描述

4.22 课堂练习

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.23 实战一:千年虫

在这里插入图片描述

【代码01】 4.23 实战一:千年虫
#coding : utf-8
lst=[88,89,90,98,00,99]#表示的员工的两位整数的出生年份
print('原列表:',lst)
'''
#遍历列表
for index in range(len(lst)):
    if str(lst[index])!='0':
        lst[index]= '19'+str(lst[index])#拼接年份之后,.再赋值
    else:
        lst[index]='200'+str(lst[index])
#修改后的年份列表
print(lst)
'''
#使用enumerate 函数遍历列表
for index, value in enumerate(lst) :
    if str(value)!='0':
        lst[index]='19'+str(value)
    else:
        lst[index]='200'+str(value)
print(lst)

4.24 实战二-模拟京东购物流程

在这里插入图片描述
在这里插入图片描述

【代码01】4.24实战二-模拟京东购物流程
#coding : utf-8
lst=[]
for i in range(5):
    goods=input( '请输入商品的编号和商品的名称进行商品入库,每次只能输入一件商品: ')
    lst.append(goods)
#输出所有的商品信息
for item in lst:
    print(item)

#创建一个列表空列表,用于存储购物车中的商品
cart=[]
while True:
    flag = False  # 代表没有商品的情况【后面加上去的】
    num=input('请输入要购买的商品编号:')
    #遍历商品列表,查询一下要购买的商品是否存在
    for item in lst:
        if num==item[0:4]:
            flag = True  # 代表商品已找到【后面加上】
            cart.append(item)#添加到购物车列表
            print('商品已成功添加到购物车:')
            break #退出的是for循环
    if flag == False and num!='q':  # flag==False简写写法not flag  #if not flag and num!='q':  【后面加上】
        print('商品不存在!')
    if num=='q':
        break#退出的是while循环
print('您购物车里已选择的商品为:')
#反向
cart.reverse()
for item in cart:
    print(item)

4.25实战三-模拟12306火车票购票.

在这里插入图片描述

【代码01】4.25实战三-模拟12306火车票购票.
#coding : utf-8
#创建字典,用于存储车票的信息,使用车次作key,使用其它信息作为value
dict_ticket={
    'G1569':['北京南-天津南','18:06','18:39','00:33'],
    'G1567':['北京南-天津南','18:15','18:49','00:34'],
    'G8917':['北京南-天津西','18:20','19:19','00:59'],
    'G203 ' :['北京南-天津南','18:35','19:09','00:34']
}
print('车次   出发站-到达站     出发时间    到达时间    历时时长')
#遍历字典中的元素
for key in dict_ticket.keys() :
    print(key,end=' ')#为什么不换行...因为车次和车次信息在一行输出#遍历车次的详细信息,是一个列表
    for item in dict_ticket.get(key):#根据key获取值dict_ticket[key]
        print(item,end='      ')
    #   换行
    print()

#输入用户的购票车次
train_no=input('请输入要购买的车次:')#根据key获取值
info=dict_ticket.get(train_no,'车次不存在') # info表示的是车次信息
#判断车次是否存在
if info!='车次不存在':
    person=input('请输入乘车人,如果是多位乘车人使用逗号分隔:')#获取车次的出发站-到达站,还有出发时间
    s=info[0]+' '+info[1] +'开'
    print('您已购买了'+train_no+' '+s+'请'+person+'尽快换取纸制车票。【铁路客服】')
else:
    print(info)
4.26 实战四-模拟手机通迅录

在这里插入图片描述

【代码01】4.26实战四-模拟手机通迅录
#coding: utf-8
# #创建一个空集合
phones=set()
#录入5位好友的姓名和手机号
for i in range(1,6):
    info=input('请输入第'+str(i)+'位好友的姓名与手机号码:')
    #添加到集合中
    phones.add(info)
#遍历集合
for item in phones:
    print(item)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值