Python中元组、集合、字典的描述
#######元组、集合、字典#######
##is与== 的区别
变量:
id: 在内存中存储的位置;id(a)
value: ==
type:变量的数据类型; type(a)
==: value, type
is: 三个都判断
** a is b ====> True, a==b一定相等, 返回True;
** a==b ====> True, a is b 不一定;
##深拷贝与浅拷贝
-# 直接赋值(li1 = li): 只传递对象的引用, li1指向对象li的内存地址空间,
因此, 原有列表li改变, 被赋值的li1也会做相应的改变.
# 浅拷贝(三种实现方式 eg: li2=li.copy()):li和li2的内存地址不同,
但是子对象的内存地址相同, 因此,原始数据改变 , 子对象也改变.
# 深拷贝(import copy, eg: li3=copy.deepcopy(li)), li和li3的内存地址不同,
包含子对象的拷贝, 所以原始对象改变并不会造成深拷贝里面任何子项的改变.
注意:
当深拷贝和浅拷贝, 针对的对象全部是不可变数据类型时, 两者效果相同;
当深拷贝和浅拷贝, 针对的对象包含是可变数据类型时, 两者才有上述区别;
所有的数值类型和布尔类型, str是不可变数据类型,
list是可变数据类型;
##元组的创建与特性及其常用方法
#元组
我们对于元组可以通俗的定义为带了紧箍咒的列表,是不可变数据类型,没有增删改查,可以存储任意数据类型
如果元组里面包含可变数据类型, 可以间接修改元组内容;
t = ([1,2,3], 4)
t[0].append(4)
print(t)
t2 = ( )
t3 = tuple([ ])
元组如果只有一个元素, 后面一定要加逗号, 否则数据类型不确定;
t4 = ('hello')
t5 = ('hello',)
print(type(t2), type(t3), type(t4), type(t5))
#元组的特性
# 索引, 切片, 重复, 连接, 成员操作符
# for循环
# for循环并且求索引(枚举)
# zip: 集和用户名和密码两个元组, 元素之间一一对应
# 元组的常用方法
# 元组的应用场景
#变量交换数值:
a = 1
b = 2
b,a = a,b
print(a,b)
我们可以理解为:先把(a,b)封装成一个元组, (1,2),b,a = a,b ======> b,a =(1,2),b = (1,2)[0], a=(1,2)[1]
# 元组的赋值: 有多少个元素, 就用多少个变量接收
# 元组的排序
##集合的定义、特性及常用方法
# 集合定义
# 集合里面的元素是不可重复的;
s = {1, 2, 3, 4, 1, 2, 3}
print(s, type(s))
s1 = {1}
print(s1, type(s1))
# 如何定义一个空集合?
s2 = {} # 默认情况是dict, 称为字典
print(s2, type(s2))
# 定义一个空集合.
s3 = set([])
print(s3, type(s3))
# 集合应用1: 列表去重
li = [1,2,3,1,2,3]
print(list(set(li)))
# 集合的特性
# 索引, 切片, 重复, 连接, 成员操作符
# 集合支持的特性只有 成员操作符, 索引, 切片, 重复, 连接,均不支持;
# for循环
# for+ index
# 集合的常用方法
可变, 无序数据类型, 添加的顺序, 和在集合中存储的顺序不同
# 增加(add),增加多个元素(update)
# 删除(pop),删除指定元素(remove)
# 交集(union), 并集(intersection),差集(difference),对等差分(symmetric_difference)
##字典的特性及其常用方法
#字典的定义
字典的key值对应value值,例如:
users = ['user1', 'user2']
passwds = ['123', '456']
userinfo = dict(zip(users, passwds))
userinfo
{'user1': '123', 'user2': '456'}
- 定义空字典, {}, dict()
- 赋值: d = {'key':'value', 'key1':'value1'}
举例:
随机生成100张卡号, 卡号的格式为610 334455 001 ---610 334455 100,默认初始密码为666666
# fromkeys第一个参数可以将list/tuple/str/set的每一个元素作为字典的key值,
# 并且所有key的value值一致, 都为'666666';
# 字典的特性
# 索引, 切片, 重复, 连接, 成员操作符
字典是不可索引,切片,重复,链接的,但可以使用成员操作符
# for循环: 默认遍历字典的key值;
# 字典的增加
#添加或者更改key-value对
# update
如果key值已经存在, 更新value值;
如果key值不存在, 添加key-value值;
# setdefault
如果key值已经存在, 不做修改;
如果key值不存在, 添加key-value值;默认情况下value值为None
# 字典的删除
# pop:弹出指定key-value值
# popitem()弹出最后一组key-value值
# del d['a'] 删除无法记录返回值
# d.clear() 清空
# 列表通过字典去重
# 通过字典的方式去重
# ** 字典的key值是不能重复的.
# d = {'a':1, 'b':2}
# d['a'] = 3
li = [1, 2, 3, 4, 65, 1, 2, 3]
print({}.fromkeys(li).keys())
#字典的查看与修改
# 查看字典里面所有的key值
print(services.keys())
# 查看字典里面所有的value值
print(services.values())
# 查看字典里面所有的key-value值
print(services.items())
# 遍历
# get方法获取指定可以对应的value值
如果key值存在, 返回对应的value值;
如果key值不存在, 默认返回None, 如果需要指定返回的值, 传值即可;