实用Python程序设计笔记

您所在的位置:网站首页 字典排序算法 实用Python程序设计笔记

实用Python程序设计笔记

2023-05-06 01:08| 来源: 网络整理| 查看: 265

视频课程:实用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、程序或算法的时间复杂度一个程序或算法的时间效率,也称“时间复杂度”,有时简称“复杂度”复杂度常用大的字母 O 和小写字母 n 来表示,比如 O(n)O(n^2) 等。 n 代表问题的规模。 O(X) 就表示解决问题的时间和 X 成正比关系。时间复杂度是用算法运行过程中,某种时间固定的操作需要被执行的次数和 n 的关系来度量的。在无序数列中查找某个数,复杂度是 O(n) 。计算复杂度的时候,只统计执行次数最多的( n 足够大时)那种固定操作的次数。比如某个算法需要执行加法 n^2 次,除法 n 次,那么就记其复杂度时 O(n^2) 的。如果复杂度时多个 n 的函数之和,则只关心随 n 的增长增长得最快的那个函数: \begin{split} &O(n^3+n^2)=O(N^3)\\ &O(2^n+n^3)=O(2^n)\\ &O(n!+3^n)=O(n!) \end{split}

常数复杂度: O(1) ,即时间(操作次数)和问题的规模无关。对数复杂度: O(\log{n}) 线性复杂度: O(n) 多项式复杂度: O(n^k) 指数复杂度: O(a^n) 阶乘复杂度: O(n!)

在无序数列中查找某个数(顺序查找): O(n) 插入排序、选择排序等笨排序方法: O(n^2) 快速排序: O(n\log{n}) 二分查找: O(\log{n}) in用于列表和用于字典、集合的区别a in b

若b是列表、字符串或元组,则该操作时间复杂度 O(n) ,即时间和b的元素个数成正比。

若b是字典或集合,则该操作时间复杂度为 O(1) ,即时间基本就是常数,和b里元素个数无关。

因此集合用于需要经常判断某个东西是不是在一堆东西里的情况,此种场合用列表替代集合,容易导致超时。

一些操作的时间复杂度总结O(1) :集合、字典增删元素,查找元素,以关键字作为下标访问字典元素的值,列表添加元素到末尾(append),列表、字符串、元组根据下标访问元素。O(n) :列表、元组查找元素(in、index),列表插入元素(insert)、删除元素(remove)、计算出现次数(count)O(n\log{n}) :python自带排序sort、sortedO(\log{n}) :在排好序的列表或元组上进行二分查找(初始的查找区间是整个元组或列表,每次和查找区间中点比较大小,并缩小查找区间到原来的一般。类似于查英语词典)。有序就会找得快!

本章课后习题:实用Python程序设计笔记习题7



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3