python 基础使用list、dict、set、可变与不可变对象

时间:2022-10-01 01:51:46

参考链接: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&comma;cou&comma;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基础类型&lpar;字典&colon;dict&rpar;

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

  8. Python基础数据类型&lpar;五&rpar; 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&lowbar;字典dict

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

随机推荐

  1. Spring各jar包的作用

    spring.jar是包含有完整发布的单个jar 包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到 spring-m ...

  2. paste DEMO合并文件

    测试数据: [xiluhua@vm-xiluhua][~]$ cat msn.txt aaa bbb bbb ccc ccc ddd bbb eee aaa ccc bbb sss [xiluhua@ ...

  3. C语言练习代码

    1.运用for循环根据输入的金字塔层数,输出金字塔 eg: #include <stdio.h>int main(void){ int i,j,num; printf("请输入三 ...

  4. JSP&sol; Servlet常见的中文乱码原因

    在开发中,我们经常遇到中文乱码的问题,比方: &浏览器中看到的 Jsp/Servlet 页面中的汉字成了 '?' ?  &浏览器中看到的 Servlet 页面中的汉字都成了乱码  &a ...

  5. EC读书笔记系列之3:条款5、条款6、条款7

    条款5:了解C++默默编写并调用哪些函数 记住: ★编译器可以(仅仅是可以,并非必须,仅当程序中有这样的用法时才会这么做!!!)暗自为class创建default构造函数,copy构造函数,copy ...

  6. redis的set类型

    1.简单描述 redis的set类型是string类型数值的无序集合.set元素最大可以包含2的32次方减1个元素.由于set类型是通过hash table实现(旧版本是这样,新版本不确定是不是改用了 ...

  7. kubernetes入门(03)kubernetes的基本概念

    一.Pod 在Kubernetes集群中,Pod是创建.部署和调度的基本单位.一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个应用的容器.在同一个Pod内部,多个容器共享存储.网络IP,以 ...

  8. &lbrack;论文阅读&rsqb;VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION&lpar;VGGNet&rpar;

    VGGNet由牛津大学的视觉几何组(Visual Geometry Group)提出,是ILSVRC-2014中定位任务第一名和分类任务第二名.本文的主要贡献点就是使用小的卷积核(3x3)来增加网络的 ...

  9. 《Linux&sol;UNIX系统编程手册》第63章 IO多路复用、信号驱动IO以及epoll

    关键词:fasync_helper.kill_async.sigsuspend.sigaction.fcntl.F_SETOWN_EX.F_SETSIG.select().poll().poll_wa ...

  10. laravel依赖注入 容器

    [看完就懂]Laravel 服务容器,IoC,DI      DI DI就是常说的依赖注入,那么究竟什么是依赖注入呢? 打个比方,电脑(非笔记本哈)需要键盘和鼠标我们才能进行操作,这个‘需要’换句话说 ...