python3---元组:集合:字典

<1>元组

1>元组的创建

列表:打了激素的数组

元组:带了紧箍咒的列表;不可变数据类型,没有增删改查;可以存储任意数据类型

定义元组

t1 = ()
t2 = tuple([])
t3 = (1, 2.1, 2e+10, True, 2j+3, [1,2,3],(1,2,3) )
print(type(t1), type(t2), type(t3),)

如果元组里面包含可变数据类型, 可以间接修改元组内容;

t1 = ([1,2,3], 4)
t1[0].append(4)
print(t1)

元组如果只有一个元素, 后面一定要加逗号, 否则数据类型不确定;

2>元组的特性

	tuple = (1,1.0,True,'westos')
索引
	print(tuple[0])
切片
	print(tuple[::-1])
连接:
不同的数据类型可以连接麼(除了数值类型之外,不同的数据类型之间不可以连接)
	print(tuple + (1,2,3))
重复
	print(tuple * 5)
for循环
	for i in tuple:
成员操作符
print(1 in tuple)
t = (1,2,'a','c','a')
# 查看元素的索引值
print(t.index('c'))
# 查看元素在元组中出现的次数
print(t.count('a'))

元组的排序

scores = (100,89,93,79,53,65)
#先将元组转换成列表
scoreli = list(scores)
scoreli.sort()
print(scoreli)
#sorted排序
score_sort = sorted(scores)
print(score_sort)

3>元组的应用

(1)交换变量
a=1		
b=4		先把a,b封装成了一个元组;(1,4)
a,b=b,a		在把b,a=a,b ===> b,a=(1,4)
print(a,b)	b=(1,4)[0] ; a=(1,4)[1]
(2)打印变量值和赋值
t_ab=(a,b)
print(t_ab)		打印变量值
t_low=('westos',34,'man')
name,age,score=t_low	元组的赋值:有多少个元素,就用多少个变量接收
print(name,age,score)
(3)元组的应用:比赛计分器

在这里插入图片描述

4>浅拷贝和深拷贝

浅拷贝:没有拷贝拷贝对象里面的元素的ip地址
深拷贝:不光拷贝了拷贝对象的ip地址,还拷贝了拷贝对象里面的元素的ip地址

浅拷贝的实现:
	li.copy()
	li[:]
	copy.copy(li)
实现深拷贝:
	copy.deepcopy(li
	import copy
	a=['koko',[34]]
	print(a,id(a))
	b=['ku',[45]]
	print(b,id(b))
	c=[a,b]
	print(c,id(c))
浅拷贝:  拷贝结果的id与拷贝对象的id不同,但是拷贝对象里面元素的id没有发生改变
   如果拷贝对象里面的元素的id被删除,那么拷贝结果与拷贝对象的那个元素都会被删除
	d=copy.copy(c)
	print(d,id(d))
	print(d[0],id(d[0]))
	print(d[1],id(d[1]))
	a.remove('koko')        #变点
	print(c,d)
深拷贝       拷贝结果的id与拷贝对象的id不同,并且拷贝结果里面元素的id拷贝对象里面元素的id不同;
   如果拷贝对象里面的元素的id被删除,那么拷贝结果的元素不会发生变化;但拷贝对象的那个元素会被删除
	e=copy.deepcopy(c)
	print(e,id(e))
	print(e[0],id(e[0]))
	print(e[1],id(e[1]))
	b.remove('ku')        #变点
	print(c,e)

<2>集合

1>集合的定义和特性

(1)集合的定义
集和里面的元素是不可重复的
	s = {1,2,3,4,5,6,6,3,3,2}
	print(s,type(s))
如何定义一个空集和
	s2 = {}  	默认情况是dict,称为字典
	print(s2,type(s2))
定义一个空集和
	s3 = set([])
	print(s3,type(s3))
集和应用1:列表去重
	li = [1,2,3,4,1,2,3]
	print(list(set(li)))
(2)集合的特性

集和支持的特性只有 成员操作符(索引 切片 重复 连接 均不支持)

s = {1,2,3}
for i in s:		for循环
    print(i,end=' ')	输出不换行
print()			输出换行
for i,v in enumerate(s):	枚举
    print('index: %s,value:%s' %(i,v))

应用:列表去重

li = [1,2,3,4,1,2,3]
print(list(set(li)))

2>集合的应用

集合:可变数据类型;添加顺序,和在集合中存储的顺序不同

(1)集合的增加

s={2,3,5,7,8,9}

s.add(4)        	添加一个元素
print(s)
s.update({1,11,12})     添加一个集合,集合里面可以有多个元素
print(s)
(2)集合的删除
s.pop()        删除最小的一个元素
print(s)
s.remove(3)    删除指定的一个元素
print(s)
(3)交集;并集;差集
s1={1,4,6,5}
s2={4,6,7,1,9}
print("交集:" ,s1.intersection(s2))   #交集
print("交集:" ,s1 & s2)
print("并集:" ,s1.union(s2))          #并集
print("并集:" ,s1 | s2)
print("差集:" ,s1.difference(s2))     #s1-(s1&s2)
print("差集:" ,s2.difference(s1))     #s2-(s2&s1)
print("差集:" ,s1-s2)
print("差集:" ,s2-s1)
s2.add(5)
print(s1.issubset(s2))      #s1是不是s2的子集
print(s1.issuperset(s2))    #s1是不是s2的超集(父集)
print(s1.isdisjoint(s2))    #s1和s2是不是不相交
(4)集合的应用
	明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性
   他先用计算机生成了N个1~1000之间的随机整数(N<=1000),N是用户输入的,对于其中重复的数字,
只保留一个,把其余相同的数字去掉,不同的数对应着不同的学生的学号,然后再把这些数从小到大排序,
按照排好的顺序去找同学做调查,请你协助明明完成“去重”与排序工作

在这里插入图片描述

<3>字典

1>字典的定义及特性

(1)字典的定义
di1 ={}	定义一个空字典

字典:key-value 键值对存储的一种数据结构
value值可以是任意数据类型:int;float;long;list;tuple;set;dict

fromkeys创建字典
fromkeys第一个参数可以是 list / tuple / str / set
将第一个参数的元素作为字典的key值,并且所有key的value值一致
d4 = {}.fromkeys({'1','2','3'},'a'))
print(d4)

工厂函数:
d5 = dict(a=1,b=2)
print(d5)
(2)字典的特性
字典不支持<索引;切片;重复;连接>;
成员操作符(in):判断的是 某个值是否为字典的key
字典的for循环:默认遍历字典的key值
for key in di:
    print(key,di[key])

2>字典的使用

(1)字典的增加
di = {'v': 9}
di['s'] = 2  	 增加一个元素;如果key值存在,则更新;
print(di)	 如果key不存在,则增加一个key-value值

di.update(a=2, b=3)  	 增加一个元素;如果key值存在,则更新;
print(di) 		 如果key不存在,则增加一个key-value值

di.setdefault('h', 5)	增加一个元素;如果key值存在,则不更新;
print(di)		如果key不存在,则增加一个key-value值
(2)字典的删除
del di['a'] 		删除指定的一个key-value值,如果key不存在,则报错
print(di)

item = di.pop('b')  	删除指定的一个key-value值,如果key不存在,则报错
print(di)

item1 = di.popitem()    删除最后一个key-value值
print(di)
(3)字典的查看
print(di.keys())	查看字典里面的所有key值
print(di.values())	查看字典里面的所有values值

for k, v in di.items():	查看字典里面的所有key值和所有values值
    print(k, "\t--->\t", v)
    
# 获取指定key对应的value值
print(di.get('s'))			如果key值存在,返回对应的value;
print(di.get('s','key not exist'))	如果key不存在,默认返回None,如果需要返回指定的值,传值即可
print(di['v'])  	如果key值不存在,程序会报错
print({}.fromkeys({'1', '4'}, '123456'))

3>字典的应用

应用1:随机生成100个卡号
1.卡号以6102009开头, 后面3位依次是 (001, 002, 003, 100),
2. 生成关于银行卡号的字典, 默认每个卡号的初始密码为"redhat";
3. 输出卡号和密码信息, 格式如下:
卡号                	  密码
6102009001                000000

在这里插入图片描述

应用2:打印出每个单词及其重复的次数
 重复的单词: 此处认为单词之间以空格为分隔符, 并且不包含,和.;
     1. 用户输入一句英文句子;
     2. 打印出每个单词及其重复的次数;

在这里插入图片描述

应用3:数字重复统计:
    1). 随机生成1000个整数;
    2). 数字的范围[20, 100],
    3). 升序输出所有不同的数字及其每个数字重复的次数;

在这里插入图片描述

4>is和==的区别
id:在内存中存储的位置
type:变量的类型
value:变量的值

	== :type,value
	is:type,value,id

结论:
    is 表示两个变量的值是否在同一块内存空间
    == 表示的是值是否相等

总结: is 返回的值是True ==返回的一定是true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值