Python自学笔记之dict和set

dict

dict全称dictionary(只为复习一下不常用单词),也就是其他语言中的map,使用键值对存储数据,查找速度极快。

使用方法:d = {‘key1‘:value1, ‘key2‘:value2}

查找key对应值的方法:d[‘key1‘]  对应输出即为value1

如未初始化,添加值的方法:d[‘key1‘] = value1_1  注意,一个key只能对应一个值,后面放入的值会把前面的值冲掉

如果key不存在,dict会报错。通常有两种方法可以用来检查key是否存在。

第一种,in的使用方法:‘key1‘ in d  返回结果为true或false;

第二种,dict提供的get方法,其使用方法:d.get(‘key1‘)  如果key不存在,返回none,也可以自定义返回值,如 d.get(‘key1‘, -1)  则key不存在时返回-1。 注意,返回none的时候Python的交互命令行不显示结果。

删除key的方法:d.pop(‘key1‘)  当然,对应的value也会一并删除,而运行此方法显示的值为value1

务必注意:dict内部存放顺序和key放入的顺序无关

和list相比,dict有以下特点:

  1. 查找速度快,时间复杂度不会随dict增大而增大
  2. 需要占用大量内存,内存浪费多

另外需要牢记的是,key必须是不可变对象。因为dict根据key来计算value的存储位置,如果相同的key每次计算时都得出不同的value,那dict内部就会完全混乱。通过key计算位置的方法是哈希算法,要保证hash的正确性,作为key的对象就不能变。Python中字符串和整数都是不可变对象,可以放心作为key,而list是可变的所以不能作为key。

set

set和dict类似,也是一组key的集合,只不过不存储值。由于key不能重复,所以set中没有重复的元素,定义时重复元素会被自动过滤。

要创建一个set,需要一个list做输入,创建方法:s = set([key1, key2, key3])  此时s的显示结果为set([key1, key2, key3]),注意此结果中的[]不再是一个list,而是告诉你set中的元素为key1,key2,key3

添加元素的方法:s.add(keyx)

删除元素的方法:s.remove(keyx)

set可以看成数学上无序无重复元素的集合,两个set可以做数学意义上的交集和并集的操作,如: s1和s2两个set做交集为 s1 & s2; 做并集为 s1 | s2

set和dict原理相同,也不能放入可变对象,因为不能判断两个可变对象是否相等也就不能保证set中无重复元素。

不可变对象

对于不可变对象来说,调用对象的任意方法也不会改变对象自身的内容。相反,这些方法会创建新的对象并返回,这样就保证了不可变对象永远是不变的。

例如:对不可变对象字符串进行如下操作,

a = ‘abc‘

a.replace(‘a‘, ‘A‘)

此时a.replace(‘a‘, ‘A‘)显示的结果确实是‘Abc‘,而a显示的结果仍旧是‘abc‘

而若对可变对象list进行如下操作,

a = [‘b‘, ‘c‘, ‘a‘]

a.sort()

则不论是a.sort()还是a,显示的结果都是 [‘a‘, ‘b‘. ‘c‘],list内部的内容已经改变了。

注意: tuple虽然是不可变对象,但由于其内部可以存放list,所以也不适合做key值。

时间: 2024-08-08 13:42:58

Python自学笔记之dict和set的相关文章

python自学笔记

python自学笔记 python自学笔记 1.输出 2.输入 3.零碎 4.数据结构 4.1 list 类比于java中的数组 4.2 tuple 元祖 5.条件判断和循环 5.1 条件判断 5.2 循环 6.使用dict和set 6.1 dict 6.2 set 7.函数的使用 7.1函数返回多个值,同时接受多个值 7.2函数参数的默认值 7.3可变参数的函数 7.4可变个数带参数名的入参 7.5参数类型组合 8.关于函数递归 9.python的高级特性 9.1切片 9.2遍历 9.3列表生

python自学笔记(一)

我没学过python,通过网上和一些图书资料,自学并且记下笔记. 很多细节留作以后自己做项目时再研究,这样能更高效一些. python基础自学笔记 一.基本输入和输出 pthon3.0用input提示用户输入,用print提示用户输出,格式为print("...") 如果格式化输出,那么格式为print("%d" %(变量名)), %d可以替换为%s等其他格式符, 以后用到什么格式自己查,这样学起来高效. 简单的例子: #-*-coding:utf-8-*- nam

Python 自学笔记(一)环境搭建

一,关于Python的介绍 关于Python的介绍,我不想多说了,网上随便一搜,很多介绍,这里我主要写下我的自学Python的 过程,也是为了促进我能继续学习下去. 二,环境搭建 1,这里我只讲解Windows,因为我比较喜欢Linux,但是windows 还是必须要用的,所以对linux不是经常用(我不是职业程序猿,只是个业余爱好者),不过这都是很简单的,不论哪个平台,都无所谓了 2,下载Python ,https://www.python.org/downloads/windows/ 选择你

Python自学笔记-进程,线程(Mr serven)

对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程. 有些进程还不止同时干一件事,比如Word,它可以同时进行打字.拼写检查.打印等事情.在一个进程内部,要同时干多件事,就需要同时运行多个"子任务",我们把进程内的这些"子任务"称为线程(Thread). 同步是指:发送方发出数据后,等接收方发回响应以后

Python学习笔记之dict、set

dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list: names = ['Michael', 'Bob', 'Tracy'] scores = [95, 75, 85] 给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长. 如

python自学笔记(四)python基本数据类型之元组、集合、字典

一.元组tuple 特性 1.有序集合 2.通过偏移来取数据 3.不可变对象,不能在原地修改内存,没有排序.修改等操作 元组不可变的好处:保证数据的安全,比如我们传给一个不熟悉的方法,确保不会改变我们的数据从而导致程序问题. 二.集合:集合是没有顺序的概念,所以不能用切片和索引操作 1.创建集合:可变的set().不可变的frozenset() 2.添加操作 add(随机插入) update(拆分插入) 3.删除 remove 4.成员关系 in.not in 5.交集(&).并集(|).差集(

Python学习笔记 set&&dict

dict 是个好东西啊,这个东东是类似于c++里面的map.其形式为 dict={key:value,key:value....} 这个东西好玩的地方主要在于 1.他的key值查找采用的是哈希算法,速度比较快 2.key值得类型可以不同,但是其key值为不可变对象,例如字符串,即便key值为数字那也是数字常量 3.value值类型也可以不同. 4.可以按key值直接进行添加,如d[1]=123(假设1之前并不是其key值,如果是其key值那么,则是修改value) 5.可以按key值直接进行查找

python自学笔记(六)二进制与位移

一.二进制 a = 1 bin(a)-->ob1  #python内置方法 ob 表示二进整型制格式 二.难缠符号 1.位移二进制的位 >> 右位移,想象成 切肉切去最后一位 例如 x >> y  #先转成二进制再位移 计算公式:x/(2**y) << 左位移 整体左移后补0 例如 x<<y 计算公式:x*(2**y) 2. & 按位与:是否都为1,右对齐,前边补0,有一个不是1就为0 0110 1000 ------- 0000 3.| 按位

Python 自学笔记(二)第一个程序 Hello World

一 打印 Hello world 1,输入 Python “Hello world” 即可 2,脚本文件输出Hello World 再命令行(cmd),输入 python 文件路径+文件名 3,Python注释 (1)python 单行注释用 # (2)python 多行注释 开头 三个 双引号,结尾 三个双引号,比如: “”“ 这里是多行注释 这里是多行注释 这里是多行注释 这里是多行注释 这里是多行注释 ”“” 或者 开头三个单引号,结束三个单引号   比如: ’‘’   ‘’‘ ’‘’ 这