参考链接: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、可变与不可变对象的更多相关文章

  1. python基础之字典dict和集合set

    作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7043642.html python基础之字典dict和集合set 字典dic ...

  2. python基础04--list,cou,dict

    1.1 列表list 1.列表可以完成大多数集合类的数据结构实现.列表中元素的类型可以不相同,它支持数字,字符串,列表,元组,集合,字典 2.列表是有序的, 可以索引,切片 3.List中的元素是可以 ...

  3. Python基础——字典(dict)

    由键-值对构建的集合. 创建 dic1={} type(dic1) dic2=dict() type(dic2) 初始化 dic2={'hello':123,'world':456,'python': ...

  4. Python 基础数据类型之dict

    字典是另一种可变容器模型,且可存储任意类型对象.字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:d = {k ...

  5. python基础之五:dict 字典

    1.数据类型的划分:可变数据类型.不可变数据类型 不可变的有:元组(tuple).字符(str).整型(int).布尔型(bool) 它们都可以哈希 可变的:列表(list).set.字典(dict) ...

  6. Python基础教程之dict和set

    1. dict Python中的dict等于js中的 map ,使用键-值(key-value)存储,具有极快的查找速度. 如果 我们要根据同学的姓名去查找他的成绩在不用dict的情况下.就需要两个l ...

  7. python基础类型(字典:dict)

    字典的介绍: 字典(dict)Python中唯一的一个映射类型.他是以{}括起来的键值对组成,在dict中key是唯一的.在保存的时候,根据key来计算出一个内存地址,然后将key-value保存到这 ...

  8. Python基础数据类型(五) dict字典

    字典dict{} 字典数字自动排序 enumerate 枚举 for i,k in enumerate(dic,1) #第二个参数默认不写就是0 ---枚举 print(i,k) dict,以{}来表 ...

  9. python基础之字典dict

    不可变数据类型:tuple.bool.int.str --可哈希类型可变数据类型:list.dict.set --不可哈希类型dict-key 必须是不可变数据类型,可哈希dict-value 任意数 ...

  10. python基础day6_字典dict

    数据类型划分:可变数据类型.不可变数据类型 不可变数据类型(又叫可哈希):元祖,bool ,int,str, 可变数据类型(又叫不可哈希):list,dict,set(集合) dict的key必须是不 ...

随机推荐

  1. 项目结合activiti工作流框架使用

    项目结合activiti工作流框架使用: 1.项目与工作流框架的结合. 2.状态:草稿(待审批).审批中.审批通过.审批失败 3. 提交审批: 0 草稿(待审批),记录绑定工作流执行id,审批状态设置 ...

  2. 深入理解 JavaScript 异步——转载

    本文章转载于深入理解 JavaScript 异步 前言 2014年秋季写完了<深入理解javascript原型和闭包系列>,已经帮助过很多人走出了 js 原型.作用域.闭包的困惑,至今仍能 ...

  3. 51nod 1066 - Bash游戏,简单博弈

    有一堆石子共有N个.A B两个人轮流拿,A先拿.每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出N和K,问最后谁能赢得比赛. 例如N = 3 ...

  4. Windows7下Thingworx 7安装

    1.环境准备 Windows7 64位+JDK8+Tomcat8+PostgreSQL9 2.安装JDK8和Tomcat8 这里没有什么太多值得叙述的,基本都是一路下一步. 需要注意的是,一个是Tom ...

  5. [agc004d]salvage robot

    题意: 别问我谁翻译的 虫合虫莫国的领土我们可以抽象为H*W的笼子,在这虫合土上,有若干个机器人和一个出口,其余都是空地,每次虫合虫莫会要求让所有的机器人向某个方向移动一步,当机器人移动到出口时会被虫 ...

  6. mysql中如何查看某个数据库或表占用的磁盘空间

    查整个库的状态:select concat(truncate(sum(data_length)/1024/1024,2),'MB') as data_size,          concat(tru ...

  7. javascript 继承之拷贝,原型,类式

    // 拷贝继承,在子类内调用父类并修正this指向,再通过for in 拷贝父类的方法实现继承,具体实现如下代码 : function Tab(){//父类构造函数 this.name='aaa'; ...

  8. bzoj4551 [HEOI2016]树

    题目描述 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下 两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均 ...

  9. Python学习————列表的增删改查

    增加:li.append(对象):追加 注:print(li.append())--->是Noneli.insert(索引,对象):插入到相应位置li.extend(对象):可迭代的添加到尾部, ...

  10. caioj 1153 扩展欧几里德算法(解不定方程)

    模板题 注意exgcd函数要稍微记一下 #include<cstdio> #include<cctype> #include<algorithm> #define ...