实用Python程序设计笔记 |
您所在的位置:网站首页 › 字典排序算法 › 实用Python程序设计笔记 |
视频课程:实用Python程序设计_中国大学MOOC(慕课) (icourse163.org) 专栏目录:从零开始学python专栏目录 1、字典的基本概念字典字典的每个元素是由“键:值”两部分组成,可以根据“键”进行快速查找格式:d={key1:value1,key2:value2}字典元素的值是可赋值的,因此也是指针所有元素的键都不相同键必须是不可变的数据类型,比如字符串、整数、小数、元组。列表、集合、字典等可变的数据类型,不可作为字典元素的键。dt={'Klee':'pyro','Lisa':29,77:'cyro'} print(dt['Klee']) dt['Kaeya']='male' print(dt) del dt[77] print(dt) print('Kaeya' in dt) #判断是否有元素键为'Kaeya' dt['Venti']=dt.get('Venti',2600) #get(key,v):如果键key存在,则返回键为key的元素的值,否则返回v print(dt['Venti']) dt['Venti']=dt.get('Venti',0) print(dt['Venti'])输出结果: pyro {'Klee': 'pyro', 'Lisa': 29, 77: 'cyro', 'Kaeya': 'male'} {'Klee': 'pyro', 'Lisa': 29, 'Kaeya': 'male'} True 2600 2600字典的键不可重复,指的是字典的键的内容不能一样a=(1,2,3) b=(1,2,3) d={a:60,b:70,(1,2,3):80,(1,2,3):90} print(d) #d中实际上只有一个元素 for x in d.keys(): print(x)输出结果: {(1, 2, 3): 90} (1, 2, 3)字典的构造items=[('name','Diluc'),('age',25)] d=dict(items) print(d) d=dict(name='Diluc',age=42,height=1.8) print(d)输出结果: {'name': 'Diluc', 'age': 25} {'name': 'Diluc', 'age': 42, 'height': 1.8}2、字典相关函数clear()清空字典keys()取字典的键的序列items()取字典的元素的序列,可用于遍历字典values()取字典的值的序列pop(x)删除键为x的元素,如果不存在,产生异常copy()浅拷贝clear()清空字典元素上述“序列”,不是list、tuple或set 字典的深拷贝字典的深拷贝和列表的深拷贝一样,也是用copy库中的deepcopy函数。 遍历字典用方法items遍历字典时,再python3.5及以前,顺序不确定。再python3.6及以后,顺序同元素加入字典的顺序。 3、字典例题:统计单词频率题目输入 若干行,每行一个单词 输出 按单词出现次数从高到低打出所有单词。次数相同的,按照字典序从小到大排。 输入样例 about send about me输出样例 2 about 1 me 1 send我的代码dict={} try: while True: s=input() dict[s]=dict.get(s,0)+1 except: for x in sorted(dict.items(),key=lambda x:-x[1],x[0]): print(x[1],x[0])用样例输入的输出结果: 2 about 1 send 1 me4、集合集合的概念和特点集合(set)的概念同数学上的集合相同: 元素类型可以不同。不会有重复元素。可以增删元素。整数、小数、复数、字符串、元组都可以作为集合的元素。但是列表、字典和集合等可变的数据类型不可作为集合的元素。集合的作用时快速判断某个东西是否再一堆东西里面(用in)。集合的构造print(set([])) #集合可由列表转换得到,set([])是空字典 a={1,2,2,'ok',(1,3)} #自动去重 print(a) b=(3,4) c=(3,4) a=set((1,2,"ok",2,b,c)) print(a) a=set("abc") #字符串转集合 print(a) a=set({1:2,'ok':3,(4,5):6}) #只取键 print(a)输出结果: set() {1, 2, 'ok', (1, 3)} {1, 2, 'ok', (3, 4)} {'a', 'c', 'b'} {1, (4, 5), 'ok'}注意:集合元素没有顺序,不能用下标访问。 集合常用函数add(x)添加元素x。如果x已经存在,则不添加clear()清空集合copy()返回自身的浅拷贝remove(x)删除元素x。如果不存在元素x,则引发异常update(x)将序列x中的元素加入到集合集合运算a,b是集合: x in ax是否在集合a中a|b求a和b的并a&b求a和b的交a-b求a和b的差,即在a中而不在b中的元素a^b求a和b的对称差,等价于(a|b)-(a&b)a==ba是否元素和b一样a!=ba是否元素和b不一样abb是否是a的真子集集合例题输入一些单词,统计不重复的单词一共有多少个。 输入样例: about take about zoo take输出样例: 3我的代码: s=set() try: while True: word=input() s.add(word) except: print(len(s))用列表做,比用集合慢很多很多!单词达到10万,就会非常明显。 5、程序或算法的时间复杂度一个程序或算法的时间效率,也称“时间复杂度”,有时简称“复杂度”复杂度常用大的字母 和小写字母 来表示,比如 、 等。 代表问题的规模。 就表示解决问题的时间和 成正比关系。时间复杂度是用算法运行过程中,某种时间固定的操作需要被执行的次数和 的关系来度量的。在无序数列中查找某个数,复杂度是 。计算复杂度的时候,只统计执行次数最多的( 足够大时)那种固定操作的次数。比如某个算法需要执行加法 次,除法 次,那么就记其复杂度时 的。如果复杂度时多个 的函数之和,则只关心随 的增长增长得最快的那个函数: 常数复杂度: ,即时间(操作次数)和问题的规模无关。对数复杂度: 线性复杂度: 多项式复杂度: 指数复杂度: 阶乘复杂度: 在无序数列中查找某个数(顺序查找): 插入排序、选择排序等笨排序方法: 快速排序: 二分查找: in用于列表和用于字典、集合的区别a in b若b是列表、字符串或元组,则该操作时间复杂度 ,即时间和b的元素个数成正比。 若b是字典或集合,则该操作时间复杂度为 ,即时间基本就是常数,和b里元素个数无关。 因此集合用于需要经常判断某个东西是不是在一堆东西里的情况,此种场合用列表替代集合,容易导致超时。 一些操作的时间复杂度总结 :集合、字典增删元素,查找元素,以关键字作为下标访问字典元素的值,列表添加元素到末尾(append),列表、字符串、元组根据下标访问元素。 :列表、元组查找元素(in、index),列表插入元素(insert)、删除元素(remove)、计算出现次数(count) :python自带排序sort、sorted :在排好序的列表或元组上进行二分查找(初始的查找区间是整个元组或列表,每次和查找区间中点比较大小,并缩小查找区间到原来的一般。类似于查英语词典)。有序就会找得快!本章课后习题:实用Python程序设计笔记习题7 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |