Python基础之元组、字典、集合
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的
提示:以下是本篇文章正文内容,下面案例可供参考
一、元组
元组() 元组推导式照样适用( i for i in tu)
1.1不可修改元素
只有一个元素时末尾加(,),否则会被认为是其他数据类型
1.2 嵌套可正常使用
例:tu=([1,2,3],) print(tu[0][1])–>2
1.3切片可正常使用
例:tu=(1,2,3) print([::-1])
1.4 count
与index一样, index返回第一个匹配到的索引
二、字典 (推导式照样适用)
{键值对,键值对,,},字典可存储任意类型对象, 键名具有唯一性,是不可变类型,如字符串、数字与元组。键值多样化,可以是任何数据类型 字典是 另一种可变容器模型,且可存储任意类型对象
1.python中字典的key都可以是什么?
一个对象能不能作为字典的key,就取决于其有没有__hash_方法。所以所有python自带类型中,除了list,dict,set和内部至少带有上述三种类型之一的tuple之外,其余对象都能当key.
例:比如数值/字符串/完全不可变的元组/函数(内建或自定义)/类(内建或自定义)/方法/包等等。 数值类型注意:因为两个不同的相等数字可以有相同的哈希值,比如1 和 1.0,认为是相同的键
拓展: 字典的key值是可哈希的,字典的存储结构是哈希表,这样字典的查找是性能就会好很多(前提是处理好碰撞),所以字典的key必须是可哈希的 可哈希的意思是:不可变
要求每一个存放到字典中的对象要实现hash函数,这个函数可以产生一个int值,叫做hash value(哈希值),通过这个int值,就可以快速趣味的确定对象在字典中的位置。然而由于Hash碰撞的存在,可能存在两个对象的hash的值是相同的,所以查找字典过程中,要比较hash值,还要比较value值。
字典在内存中存储数据的位置和键的hash也是相关的,逻辑上也相应印证。先计算hash,找到相对应的那片内存空间,里面没有值的话就写入,对于字典来说就是新增键值对;如果已经有值了,就判断新来的键和原来的那里的键是否相等,相等就认为是一个键,对于字典来说就是更新值,不相等就再开空间,相当于字典新增键值对。
2.根据值求键
dict1={'A':'a','B':'b','C':'a'}
print(list(filter(lambda k:dict1[k]=='a',dict1)))
dict2={'A':'a','B':'b','C':'a'}
print([k for (k,v) in dict2.items() if v=='a'])
dict={'A':'a','B':'b','C':'a'}
print(list(dict.keys())[list(dict.values()).index('a')])
3.取值
dict1[‘键名’]–》若键名存在返回键值,若不存则报错 dict1.get(’键名‘)–》若键名存在返回键值,若不存在则返回None dict1.get(‘键名’,‘默认值’)–》若键名不存在则返回默认值
4.字典常用操作
1.修改元素(有则修改无则增)–》dict1[‘键名’]=新值 2.删除元素 del clear
1. del 删除指定元素, del dict1['键名']
2. 删除整个字典 del dict1 dict1直接不存在
3. clear 清空整个字典 clear dict1 dict1={}
3.len()求长度–》字典中有几个键值对 len(dict1)返回键值对个数 4.key 返回字典里面包含的所有键名的列表
- print([li ifor i in dict1]) # [‘键名’,’键名‘]
- dict1.key() #dict_key([‘键名’,’键名‘])
dict1={'name':23,'sge':'sfs4'}
print(dict1.get('name'))
print(dict1['name'])
print(dict1.get('name','22'),dict1.get('num','44'))
dict1['nam']=45
print(dict1)
del dict1['nam']
print(len(dict1))
print(dict1.keys())
print([i for i in dict1])
print(dict1.values())
print([i for i in dict1.values()])
print(dict1.items())
print([i for i in dict1.items()])
a=[i for i in dict1.items()]
print(''.join(a[1]))
三、(set)集合{元素,元素,,,}
1.集合是无序的(全是整数除外,会按从下到大),元素是惟一的
集合无序的实现方式是hash表,字符每次的hash值是随机的,位置是随机的 而整数的hash值是对应的值,位置是固定的,所以是不变的 python中整合的hash值是它本身,浮点数的hash值也是固定的
2.可以为元组或列表去重
3. 添加元素(list(append\extend))
- add() 整体添加 ----set.add(‘添加的元素’) 只有一个参数
- updata() 分散添加 把传入的元素拆分 一个个放入集合 —set.updata(’'可迭代对象)
4.删除元素
- remove(‘元素’) ’元素‘有则删除无则报错
- pop() 先无序排列,然后将左边第一个元素删除 若全是数字的话,则从小到大排序,删除左边第一个元素
- discard(‘元素’) 有则删除无则不操作
5.交集(&)和并集(|)
& 两者共有的,没有则为空集set() | 综合的
se={'1',2,3,4}
se.add('gdg')
print(se)
se.update('sfsf')
print(se)
se.remove('s')
print(se)
set2={4,3,2,4,1}
set3={2,4,3,5,1}
set2.pop()
set2.discard(4)
print(set2)
print(set2&set3)
|