python 基础使用list、dict、set、可变与不可变对象
参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017104324028448
dict是字典,可以储存键值对类型的值,set与dict相同,只是set只储存key值,而不储存value。
补充:
python中数值类型(int、float)、元组、str是不可变对象,而列表list、字典dict、集合set是可变对象
list.cout('a')查看list中'a'的个数
>>> l
['a', 2]
>>> l.count('a')
List
问题:list index out of range 和 list assignment index out of range的原因
>>> a=[[],[],[1]]
>>> a[0][-1]=5
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range#是再下标溢出的情况下依旧分配值的时候出现的异常
>>> a[0][-1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range#是访问的下标超出了list的地址
>>> a[0][1]=5
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> a[0][1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>>
dict
a={'sex':'nan'}
>>> 'sex' in a#默认在key中检查
True
>>> 'nan' in a
False
>>> 'sex' in a.values()
False
>>> 'nan' in a.values()
True
>>> 'sex' in a.keys()
True
>>>
dict又称map,他以键值对的形式储存数据,并且为了查找方便,在存储数据的时候,会根据key的值去计算应该放置的位置。为了保证计算位置的算法的结果不冲突,所以就要求dict数据的key值不能重复。由于这种特性,使得在查找数据时,与list的从头开始查找相比,dict中储存的数据查找时极快的,但是对空间有些浪费,因为常规情况下的带储存数据经过算法处理后,并不会无间隔的紧密的按顺序放置在内存中,而是分散的。
dict内部存放的顺序和key放入的顺序是完全没有关系的
dict的key必须是不可变对象,因为dict内使用hash计算key存放的位置,如果每次计算相同的key得出的结果不同,就会造成key的混乱,如果用可变对象当作key,会报错
>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
dict的一些方法和特性
一个key只能对应一个value
可以通过in判断是否存在(只匹配key,不匹配value)
>>> l={'a':'1','b':'2'}
>>> 'a' in l
True
>>> '1' in l
False
还可以通过 get() 方法获取指定key的内容,若key不存在,返回None,或者返回自己指定的内容
>>> l.get('a')
'1'
>>> l.get('1')#返回None
>>> l.get('1',aaa)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'aaa' is not defined#因为必须写“aaa”
>>> l.get('1',1111)
1111
>>>
使用 pop(key) 方法删除指定的key值
使用remove()删除list中的index
参考链接:https://blog.csdn.net/u013066730/article/details/85260764
使用dict一定要注意,dict的key一定是不可变对象,在Python中,字符串、整数等都是不可变的,而list是可变的。
list与dict的区别:
两者之间的区别主要在于查找速度和对储存的使用率上面
1)list的查找速度会随着存放数据的数量的增加而增加,但占用的内存小,浪费内存还小。
2)dict的查找速度极快,不会受存放数据数量大小的影响,但占用内存大,浪费空间多。
set
set 和dict类似,也是一组 key 的集合,但不储存 value ,同样的key不能重复。
使用一个list作为输入创建set
>>> s=set([1,2,'a'])#注意创建时传入的参数是一个list
>>> s
{1, 2, 'a'}#这样显示并不代表set是有序的
>>> s=set([1,2,'a','a'])
>>> s
{1, 2, 'a'} #不重复
>>>
使用 add(key) 添加 key 到 set 中
>>> s.add('b')
>>> s.add('a')#重复添加没有效果
>>> s
{1, 2, 'a', 'b'}
使用 romove(key) 删除
set 可以看作为数学意义上的一个集合,这个集合中的元素是无序的、是不重复的,可以做数学意义上的交集、并集操作。
>>> b=set([3,4,'d'])
>>> s&b#交集
set()
>>> b
{'d', 3, 4}
>>> s|b#并集
{1, 2, 'a', 3, 4, 'b', 'd'}
>>>
不能添加可变元素,注意:tuple虽然是不可变元素,但是包含可变元素的tuble也不行
>>> b.add([5,6])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
AttributeError: 'tuple' object has no attribute 'add'
>>> b.add((1,2,[3,4]))#tuple中包含了可变元素list
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>>
可变与不可变对象
不可变对象就是虽然看起来对他的改变会生效,是因为其返回一个新的对象。如
>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'
而可变对象如 list
>>> l=[1,2]
>>> l
[1, 2]
>>> l[0]='a'
>>> l
['a', 2]
>>>
所以,对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。
python 基础使用list、dict、set、可变与不可变对象的更多相关文章
- python基础之字典dict和集合set
作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7043642.html python基础之字典dict和集合set 字典dic ...
- python基础04--list,cou,dict
1.1 列表list 1.列表可以完成大多数集合类的数据结构实现.列表中元素的类型可以不相同,它支持数字,字符串,列表,元组,集合,字典 2.列表是有序的, 可以索引,切片 3.List中的元素是可以 ...
- Python基础——字典(dict)
由键-值对构建的集合. 创建 dic1={} type(dic1) dic2=dict() type(dic2) 初始化 dic2={'hello':123,'world':456,'python': ...
- Python 基础数据类型之dict
字典是另一种可变容器模型,且可存储任意类型对象.字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:d = {k ...
- python基础之五:dict 字典
1.数据类型的划分:可变数据类型.不可变数据类型 不可变的有:元组(tuple).字符(str).整型(int).布尔型(bool) 它们都可以哈希 可变的:列表(list).set.字典(dict) ...
- Python基础教程之dict和set
1. dict Python中的dict等于js中的 map ,使用键-值(key-value)存储,具有极快的查找速度. 如果 我们要根据同学的姓名去查找他的成绩在不用dict的情况下.就需要两个l ...
- python基础类型(字典:dict)
字典的介绍: 字典(dict)Python中唯一的一个映射类型.他是以{}括起来的键值对组成,在dict中key是唯一的.在保存的时候,根据key来计算出一个内存地址,然后将key-value保存到这 ...
- Python基础数据类型(五) dict字典
字典dict{} 字典数字自动排序 enumerate 枚举 for i,k in enumerate(dic,1) #第二个参数默认不写就是0 ---枚举 print(i,k) dict,以{}来表 ...
- python基础之字典dict
不可变数据类型:tuple.bool.int.str --可哈希类型可变数据类型:list.dict.set --不可哈希类型dict-key 必须是不可变数据类型,可哈希dict-value 任意数 ...
- python基础day6_字典dict
数据类型划分:可变数据类型.不可变数据类型 不可变数据类型(又叫可哈希):元祖,bool ,int,str, 可变数据类型(又叫不可哈希):list,dict,set(集合) dict的key必须是不 ...
随机推荐
- winforms控件
我们在开发窗体应用时,控件是必不可少的今天我们就来认识一下控件 在认识控件之前还要先来认识一下窗体具体如下: 认识窗体和控件 窗体 ...
- javascript满天小星星
- [ZJOI2015]诸神眷顾的幻想乡 广义后缀自动机_DFS_语文题
才知道题目中是只有20个叶子节点的意思QAQ.... 这次的广义后缀自动机只是将 last 设为 1, 并重新插入. 相比于正统的写法,比较浪费空间. Code: #include <cstdi ...
- oralce模糊查询之含有通配符
oracle中通配符有 '_'和'%'当like '_ww%'时,会把'_'和'%'当作通配符使用导致查不出含有'_'和'%'的数据.这时用到转译字符 like '\_ww\%' escape '\ ...
- 滴滴云安装mysql数据库
Linux CentOS安装配置MySQL数据库 没什么好说的,直接正面刚吧. 安装mysql数据库 a)下载mysql源安装包:wget http://dev.mysql.com/get/mys ...
- 微软的鼠标 Microsoft mouse
微软是做软件出身的厂商, 所以微软开发的软件质量毋庸置疑,Windows操作系统还有诸如Office的办公软件拥有庞大的用户群. 微软家的Visual Studio也被号称宇宙最强IDE,我个人也每天 ...
- How Javascript works (Javascript工作原理) (六) WebAssembly 对比 JavaScript 及其使用场景
个人总结: 1.webassembly简介:WebAssembly是一种用于开发网络应用的高效,底层的字节码.允许在网络应用中使用除JavaScript的语言以外的语言(比如C,C++,Rust及其他 ...
- [APIO2014]回文串(回文自动机)
题意 给你一个由小写拉丁字母组成的字符串 s.我们定义 s 的一个子串的存在值为这个子串在 s 中出现的次数乘以这个子串的长度. 对于给你的这个字符串 s,求所有回文子串中的最大存在值. |S|< ...
- 越努力越幸运--3-日常bug修复
提供一个so给PYTHON调用,后端发现业务处理流程不是按照方法传入的参数来跑. 查看c的代码,看了客户端没看出什么问题,查看服务端为什么会出现这样的情况,有些字段明显不是入参带过来的,跟踪服务端解析 ...
- window下搭建Python3.7+selenium3.1.1+pycharm环境
1.安装Python3.7 1.1 下载 Python并安装 Python3.5 (勾选上 Add Python3.7 to PATH) 点击 Install Now,安装完成后将python路径加 ...