python字典和集合对象可以进行索引操作吗_python 集合(set)和字典(dictionary)的用法解析...
Table of Contents generated with DocToc
ditctaionary and set
hash 介绍
hash是计算机中非常常见一种查找的手法,它可以支持常数时间的insert、remove、find,但是对于findMin、findMax、sort等操作就支持的不是很好,具体是为什么呢;
hash其实是通过key来找value的,可以这样简单的理解为value都被存在一个数组之中,每次你用key计算一下可以得到相应数组的下标,即 index=f(key) 是不是一下子就找到元素所在位置了呢!
集合-set
集合(set)是一类容器,元素没有先后顺序,并且元素的值不重复。
集合的字面量用花括号{}
eg:
{1,5,7}
{'apple', 'orange', 'pear', 'banana'}
创建
直接给变量赋值一个集合字面量
fruit = {'apple', 'orange', 'pear', 'banana'}
使用set()创建一个空集合
emp = set()
注:emp = {} #创建一个空字典
使用set()将列表或元组转换成集合
prime = set([1,3,5,7,11])
结果是:
{1, 3, 5, 7, 11}
操作和访问集合的元素
可以用add()和remove()添加和删除集合元素
可以用min()、max()、len()和sum()对集合操作。
集合内的元素是无序的,所以不能像列表那样通过下标来访问集合元素。
用循环实现遍历集合中的各个元素
s = {2,3,5,7,11}
for i in s:
print(i,end='')
#输出:
#235711
运算符in和not in 用于判断某个元素是否在集合中。
s = {2,3,5,7,11
print(5 in s)
print(4 not in s)
输出:
True
True
子集、超集、相对判断
如果集合s1中的元素,同样都在集合s2中,则称s1为s2的子集,s2为s1的超集。
使用s1.issubset(s2)来判断s1是否为s2的子集。
使用s2.issuperset(s1)来判断s1是否为s2的超集。
s1 = {2,3,5,7}
s2 = {1,2,3,4,5,6,7}
print(s1.issubset(s2))
print(s2.issuperset(s1))
输出:
True
True
使用关系运算符==和!=
- 判断2个集合包含的元素完全相同与否。
使用关系运算符<,<=,>,>=。
- 如果s1是s2的真子集,则s1
- 如果s1是s2的子集,则s1<=s2是True
- 如果s1是s2的真超集,则s1>s2是True
- 如果s1是s2的超集,则s1>=s2是True
- 注:s1是s2的真子集的意思是s1是s2的子集,但是s2中至少有一个s1中不存在的元素; s1是s2的真超集的意思是s1是s2的超集,但是s1中至少有一个s2中不存在的元素。
通过集合的函数或运算符进行集合的并集、交集、差集和对称差的集合运算。
运算
函数
运算符
说明
并集
union()
|
同数学中的并集
交集
intesection()
&
同数学交集
差集
difenrence()
-
s1-s2出现在s1不出现在s2
对称差
symmertric_diference()
^
s1^s2=s1
字典-dictionary (map)
字典是一个用“键”做索引来存储的数据的集合。一个键和它所对应的数据形成字典中的一个条目。字典的key是用来做hash运算的,需要不可变对象,如数字、字符串、元组;可变的对象不可以作为key,如list、dictionary、set
创建字典
用花括号{ } 来表示,每个元素用冒号分隔键和数据。可以用{}或者dict()来创建空字典。
students = {3180101:’张三’, 3180102:’李四’, 3180105:’王五’, 3180110:’赵六’}
d={'math': '0001', 'python': '0002', 'c': '0003'}
d=dict([("math","0001"),("python","0002"),("c","0003")])
d=dict(math="0001",python="0002",c="0003")
字典的基本运算
访问和修改条目
直接用[ ]运算符,用<字典> [键]的形式,访问键所对应的数据。
score = {'张三':78, '李四':92}
print(score['张三'])#访问score中键为'张三'的数据
score['李四'] = 89#把score中键为'李四'的数据修改为89
score['王五'] = 100#score中没有键为‘王五’的元素,则增加一项,键为’王五’,数据为100。
print(score)
输出:
78
{'张三': 78, '李四': 89, '王五': 100}
删除条目
del dictName[key]
如果key不存在,会抛出KeyError异常
遍历字典
# 循环
score = {'张三':78, '李四':92, '王五':89}
for name in score:
print(name + ':' + str(score[name]))
#用items()
for key,value in score.items():
print(key + ':' + str(value))
输出:
张三:78
李四:92
王五:89
字典的大小len()
检测,in 和not in检测key是否在字典中
用==和!=比较2个字典是否相同(键和值都相同)
字典常用函数
函数
说明
keys()
返回由全部key组成的序列
values()
返回由全部值组成的序列
items()
返货一个序列,每一项都是一个tuple,(key,value)
clear()
删除所有条目
get(key,value)
返回这个键所对应的值,如找不到返回value
pop(key)
返回这个键所对应的值,同时删除这个条目
可变对象和不可变对象
可变对象和不可变对象是Python语言的核心概念。
不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。
可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址。
不可变数据类型创建不可变对象,可变数据类型创建可变对象
可变类型有:列表、集合、字典
不可变类型有:整数、浮点数、复数、字符串、逻辑量(True False)、元组
不同数据类型对象和逻辑值的变换
数据类型
True
False
整数
非0
0
浮点数
非0
0.0
复数
非0
0+0j
字符串
非空
""
逻辑量
True
False
列表
非空
[]
元组
非空
()
集合
非空
set()
字典
非空
{}
应用
set
列表去重
#去重,但不能保证保持原有顺序
mailto = ['cc', 'bbbb', 'afa', 'sss', 'bbbb', 'cc', 'shafa']
addr_to =list(set(mailto))
print(addr_to)
#result ['shafa', 'cc', 'sss', 'afa', 'bbbb']
#排序后保证保持原有顺序
addr_to.sort(key = mailto.index)
print(addr_to)
#result ['cc', 'bbbb', 'afa', 'sss', 'shafa']
找鞍点
n=int(input())
a=[]
for i in range(0,n):
b=input().split()
a.insert(i,b)
c=[]
d=[]
for i in range(0,n):
maxa=max(int(a[i][j]) for j in range(n))
mina=min(int(a[k][i]) for k in range(0,n))
c+=[(i,j) for j in range(n) if int(a[i][j])==maxa]
d+=[(k,i) for k in range(n) if int(a[k][i])==mina]
c=list(set(c)&set(d))
if (c!=[]):
print(c[0])
else:
print("NONE")
dictionary
字典替代分支语言
#输入一个1到7的数字,输出对应的星期名的缩写
days={1:"Mon",2:"Tue",3:"Wed",4:"Thu",5:"Fri",6:"Sat",7:"Sun"}
num=int(input())
print(days[num])
result={"+":"x+y","-":"x-y","*":"x*y","/":'''x/y if y!=0 \
else "divided by zero"'''}
x=int(input())
z=input().strip()
y=int(input())
r=eval(result.get(z))#计算表达式的值
if type(r)!=str:
print(format(r,'.2f'))
else:
print(r)
字典计数
eg:1
#输入一行字符,求字符”a”,”b”和”c”出现的次数
diccount={char:0 for char in "abc"} #字典初始化
s=input()
lst=[char for char in s if
ord("a")<=ord(char)<=ord("c")]
for char in lst:
diccount[char]+=1
print(diccount)
eg2:
#输入一行字符,求每个字符出现的次数
#建字典dicchar,键是字符,值是字符出现的次数。由于不能预知出现哪些字符,所以不能预先初始化字典
#注意字典的get函数:get() 函数返回指定键的值,如果值不在字典中返回默认值。countchar.get(c,0)函数返回键为c的值, 不在字典中返回0。
str=input()
countchar={}
for c in str:
countchar[c]=countchar.get(c,0)+1
print(countchar)
eg:
#求列表中两数之和等于指定数的下标
'''
Given nums = [2, 11,7, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 2].
'''
nums = [2, 6, 11, 15,7,8]
target = 9
hm = dict()
for i in range(len(nums)):
if nums[i] in hm:
print(hm[nums[i]], i)
break
hm[target - nums[i]] = i
print([2, 6, 11, 15,7,8])
print(hm)
字典列表嵌套
books=[
{"name":u"C#从入门到精通","price":25.7,"store":u"卓越"},
{"name":u"ASP.NET高级编程","price":44.5,"store":u"卓越"},
{"name":u"Python核心编程","price":24.7,"store":u"当当"},
{"name":u"JavaScript大全","price":45.7,"store":u"当当"},
{"name":u"Django简明教程","price":26.7,"store":u"新华书店"},
{"name":u"深入Python","price":55.7,"store":u"新华书店"},
]
print(min([item["price"] for item in books ]))
#24.7
books[0]['name']
#C#从入门到精通
字典嵌套
users = {'aeinstein': {'first': 'albert',
'last': 'einstein',
'location': 'princeton'},
'mcurie': {'first': 'marie',
'last': 'curie',
'location': 'paris'},
}
for username, user_info in users.items():
print("\nUsername: " + username)
full_name = user_info['first'] + " " + user_info['last']
location = user_info['location']
print("\tFull name: " + full_name.title())
print("\tLocation: " + location.title())
'''
Username: aeinstein
Full name: Albert Einstein
Location: Princeton
Username: mcurie
Full name: Marie Curie
Location: Paris
'''
图和字典
# %% 求图的顶点数,边数,边的总长 空字典{},空集合 set()
d={"start": {1:1,2:2,3:4}, #第一个点为“start”,一条边指向1,长度为1,一条指向2,长度为2,一条指向3,长度为4
1:{3:5},
2:{"end":8,3:78},
3:{2:4,"end":8},
"end":{} }
v=set(); e=set() ;s=0 #顶点的集合,边点的集合
for key,value in d.items():
v.add(key)
if type(value)==dict:
for key1,value1 in value.items():
v.add(key1)
e.add((key,key1))
s+=value1
print(len(v),len(e),s)
#5 8 110
组装字典
id = "IAD"
location = "Dulles Intl Airport"
max_temp = 32
min_temp = 13
precipitation = 0.4
print("{id:3s} : {location:19s} : {max_temp:3d} / {min_temp:3d} /{precipitation:5.2f}".format(
id=id, location=location, max_temp=max_temp,
min_temp=min_temp, precipitation=precipitation))
data = dict(
id=id, location=location, max_temp=max_temp,
min_temp=min_temp, precipitation=precipitation
)
print("{id:3s} : {location:19s} : {max_temp:3d} / {min_temp:3d} /{precipitation:5.2f}".format_map(data))
#IAD : Dulles Intl Airport : 32 / 13 / 0.40
#IAD : Dulles Intl Airport : 32 / 13 / 0.40
#date={'id': 'IAD', 'location': 'Dulles Intl Airport', 'max_temp': 32, 'min_temp': 13, 'precipitation': 0.4}
参考文档
注:如有侵权联系作者删帖
python字典和集合对象可以进行索引操作吗_python 集合(set)和字典(dictionary)的用法解析...相关推荐
- python字典和集合对象可以进行索引操作_建议收藏丨纯知识点:Python基础—字典、集合操作大全...
本文为纯知识点,预计需阅读二十分钟 数据结构基本上就是--它们是可以处理一些 数据 的 结构 .或者说,它们是用来存储一组相关数据的. 在Python中有四种内建的数据结构--列表.元组和字典,集合. ...
- python字典和集合对象可以进行索引操作_Python中的字典跟集合整理笔记
泛映射类型 映射类型:不仅仅是dict,标准库里的所有映射类型都是利用dict来实现的,因此它们有个共同的限制,即只有可散列的数据类型才能用做这些映射的键.(只有键有这个需求,值并不需要必须是可散列的 ...
- python字典和集合对象可以进行索引操作_python字典和列表的高级应用
1.将序列分解为单独的变量 1.1问题 包含n个元素的元组或列表.字符串.文件.迭代器.生成器,将它分解为n个变量 1.2方案 直接通过赋值操作 要求:变量个数要等于元素个数 当执行分解操作时,有时需 ...
- Python 数据分析三剑客之 Pandas(二):Index 索引对象以及各种索引操作
CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...
- python字典和集合对象可以进行索引_Python字典和集合
1.泛映射类型 collections.abc 模块中有 Mapping 和 MutableMapping 这两个抽象类,他们的作用是为dict和其他类似的类型定义形式接口. 标准库里所有映射类型都是 ...
- python字典和集合对象可以进行索引_python集合和字典
Python也包含有 集合 类型.集合是由不重复元素组成的无序的集.它的基本用法包括成员检测和消除重复元素.python集合对象也支持像 联合,交集,差集,对称差分等数学运算. 花括号或 set() ...
- python的内置对象有哪些、列举说明_Python内置对象汇总
内置对象方法汇总 常用内置对象的方法 String 定义,切片,长度,替换,编列..... 列表/元组 定义,使用,循环遍历...... 字典 定义,使用,循环遍历....... 集合Set 连接数据 ...
- python绘制饼状图图例_python matplotlib饼状图参数及用法解析
这篇文章主要介绍了python matplotlib饼状图参数及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在python的matplo ...
- java中集合什么时候有索引,JavaSE中Collection集合框架學習筆記(1)——具有索引的List...
前言:因為最近要重新找工作,Collection(集合)是面試中出現頻率非常高的基礎考察點,所以好好惡補了一番. 復習過程中深感之前的學習不系統,而且不能再像剛畢業那樣死背面試題,例如:String是 ...
最新文章
- 在网络通讯中,如何自己分配可用的端口号和获取自己的ip地址
- Blender全流程制作真实感3D产品学习教程
- 工坊专访|2020智博会,AR、VR、智能驾驶是亮点
- python xlwings下载_Python学习随笔:使用xlwings读取和操作Execl文件
- php分目录存放session,phpsession实现多级目录存放实现代码,phpsession_PHP教程
- 声速的测量的实验原理和应用_CEMS烟气在线分析仪测量原理计经典应用
- centos 等保三级_等保测评三级整改-身份鉴别
- 【NLP】语义角色标注(Semantic Role Labelling)
- UJAM Beatmaker VICE for Mac(80年代风格鼓机插件)
- 特殊ip地址汇总!!!
- Java编程英语单词大全_java编程常用英语单词
- 如何搜集你想要的信息
- API和SDK是什么?有什么区别?如何测试SDK?一篇文章统统告诉你!
- Python的数据分析可视化十种技能总结
- 牛顿迭代法解线性方程matlab程序,牛顿迭代法matlab程序(解线性方程组)
- 李宗盛——给自己的歌,两个版本吉他谱
- 精益生产25个必备工具!
- 【Web-南邮CTF】Web-CTF入门第1天
- YYCMS搭建影视网站教程
- IntelliJ IDEA开发工具的完成