资讯专栏INFORMATION COLUMN

[学习笔记]Python基本语法之dict,set

AZmake / 2088人阅读

摘要:如果一个对象定义了和两个方法,它就是一个迭代器,对于迭代器来说,返回的是它自身,则是返回迭代器中的下一个值。

复习索引:

1. dict与list的区别是什么?查找方面
2. dict如何进行数据的存、取、判断是否存在、返回位置、删除等操作?
3. 什么是不可变对象?在dict和set中如何应用?
4. dict和set有什么异同?
5. range(),abx()函数如何使用?参数是什么,返回什么?
6. 什么是可迭代对象?

dict
dict全称dictionary,Python内置字典,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

与list对比,假设要根据名字查找对应的成绩,需要两个list实现,先在names中找到对应的位置,再从scores中取出对应的成绩,list越长,耗时越长。

names = ["jianglin", "jiangduo", "jiangzheng"]
scores = [100, 99, 98]
a="jianglin" in names  #判断值是否在列表中,返回True或False
if a
   b=scores[names.index("jianglin")] #index()方法返回""在列表中每一次出现的位置,默认搜索整个列表。string类型可以用find()方法查找字符串位置,如果找到则返回第一个匹配的位置。
   print(b)
else
   print("查无此人")

用dict实现,直接根据名字查找成绩。

dict实现原理类似于查字典,先在字典的索引表(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字,查找速度不会随着字典大小的增加而变慢,给定一个名字,比如"jianglin",dict在内部可以直接计算出"jianglin"对应的存放成绩的页码,也就是100这个数字的内存地址,直接取出来,所以速度非常快。这种key-value存储方式(一个key对应一个value),在放进去的时候,必须根据key算出value的存放位置,这样取出来的时候才能根据key直接拿到value。

而list则是把字典从第一页往后翻,直到找到我们想要的字,list越大,查找越慢。

dict需要占用大量的内存,list则占用空间小,内存浪费少,dict是用空间来换取时间的一种方法。dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在。

dict的key必须是不可变对象,因为dict根据key来计算value的存储位置,这种通过key计算位置的算法叫做哈希算法(Hash)。在Python中,字符串和整数都是不可变对象,可以作为key,而list是可变的,不能作为key。

d={"jianglin":100,"jiangduo":99,"jiangzheng":98} #注意{}
d["jianglin"] #注意[]
100
>>> d["shenhangyu"]=97 #可以通过key放入数据,猜想:dict中的数据其实是无序的?dict内部存放的顺序和key放入的顺序没有关系
>>> d["shenhangyu"]
97

>>> "jianglin" in d #可以通过in判断key是否存在
True
>>> d.get("yangshu") #通过dict的get()方法,如果key不存在,返回None(不显示结果)。**
>>> d.get("yangshu",-1)#或者可以指定返回的value
-1
>>>

>>> d.pop("shenhangyu") #删除key及对应value,可以用pop()方法
97
>>> d
{"jianglin": 100, "jiangduo": 99, "jiangzheng": 98}
>>>

set

set和dict类似,是一组key的集合,但是不存储value。由于key不能重复,所以在set中没有重复的key。

set可以看作数学意义上的无序和无重复元素的集合,因此两个set可以做数学意义上的交集、并集等操作。

set和dict的唯一区别仅在于没有存储对应的value,但set和dict的原理相同,不可以放入可变对象(即list)。

>>> s=set([1,2,3])#创建一个set,需要提供一个list作为输入集合,set()方法
>>> s #传入的参数[1,2,3]是一个list,显示的{1,2,3}只是表示这个set内部有1,2,3这3中元素,显示的顺序不表示set是有序的。
{1, 2, 3}

>>> s=set([1,1,2,2,3,3])
>>> s
{1, 2, 3} #重复元素在set中自动被过滤

>>> s   #通过add(key)方法可以添加元素到key中,可以重复添加,但不会有效果。
{1, 2, 3}
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}

>>> s.remove(4) #通过remove(key)方法可以删除元素
>>> s
{1, 2, 3}

>>> s1=set([1,2,3]) #交集,并集操作
>>> s2=set([2,3,4])
>>> s1&s2
{2, 3}
>>> s1|s2
{1, 2, 3, 4}

不可变对象
string是不可变对象,list是可变对象

对于可变对象list,对list进行操作,list内部的内容会变化:

>>> a=["c","b","a"]
>>> a.sort()
>>> a
["a", "b", "c"]

对于不可变对象,比如string

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

>>> a="abc"
>>> a.replace("a","A")  #replace方法的确变出了"Abc",但变量a仍是"abc"
"Abc"
>>> a
"abc"

>>> a="abc"  #a是变量,"abc"是字符串对象,a指向的对象的内容是"abc"
>>> b=a.replace("a","A") #方法replace()是作用在字符串对象"abc"上的,方法没有改变字符串"abc"的内容,而是创建了一个新字符串"Abc"。
>>> b
"Abc"
>>> a
"abc

"

>>> d={(1,2,3):100} #tuple元组(1,2,3)是不变对象,可以作为key构建dict或set
>>> d[(1,2,3)]
100

>>> d={(1,[2,3]):200} #(1,[2,3])中包含有list,不可以作为key
Traceback (most recent call last):
  File "", line 1, in 
TypeError: unhashable type: "list"

>>> s3=set([(1,2,3)])
>>> s3
{(1, 2, 3)}

>>> s4=set([(1,[2,3])])
Traceback (most recent call last):
  File "", line 1, in 
TypeError: unhashable type: "list"

给你一个列表 L, 对L进行升序排序并输出排序后的列表。默认升序False输出

L.sort()
print(L)

range()
range(start,stop,step) 计数从start开始,默认从0开始,range(5)等价于range(0,5);计数到stop结束,但不包括stop,range()是[0,1,2,3,4],步长默认为1。

L=[1,2,3,4,5]
for i in range(L.len()-1,0,-1)
    print(i)

abs(X)求绝对值函数,返回一个数的绝对值,这个数可以是整数或浮点数 可以在交互式命令行通过help(abs)查看abs函数的帮助信息

>>> abs(100)
100
>>> abs(-20)
20

可迭代对象
C++中的循环语句,例如for(int i=0; i<100; i++),for本身只起到让代码重复执行的作用,没有什么额外功能,在Python中类似while循环。python中的for循环不一样,使用for时,我们没有额外指定结束条件,也不需要一个用来计数的数值,甚至可以通过一个字符串进行循环。这是因为Python中的迭代器(Iterator)以及可迭代对象(Iterable)。如果一个对象定义了_iter_和_next_两个方法,它就是一个迭代器,对于迭代器来说,_iter_返回的是它自身self,_next_则是返回迭代器中的下一个值。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43631.html

相关文章

  • python3学习笔记(2)----python的数据类型

    摘要:的基本数据类型中的变量不需要声明。在里,只有一种整数类型,表示为长整型,没有中的。字符串的截取的语法格式如下变量头下标尾下标索引值以为开始值,为从末尾的开始位置。列表列表是中使用最频繁的数据类型。注意构造包含或个元素的元组的特殊语法规则。 1、python3的基本数据类型 Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在 Python 中,...

    陆斌 评论0 收藏0
  • 记录我的Python学习笔记

    摘要:本文是通过廖雪峰的网站学习而整理的真的是很好的教程,省得我花钱买书了,然后我没有去再整理总结语法,而是直接通过写出代码段来体现自己的学习,也方便以后的快速复习回顾。 不想再像以前那样,什么都从头开始学习语法、总结语法,这样反而会过分纠结于语法,耽误了开发,毕竟语言的主要属性是工具,次要的属性是语言本身。 所以还是先熟练使用语言去进行开发,等足够熟悉了,再去研究语言本身(编译原理……)。...

    lijy91 评论0 收藏0
  • Python零基础到入门】Python基础语法篇——基本数据类型【文末送书】

    摘要:布尔值布尔值和布尔代数的表示完全一致,一个布尔值只有两种值的数据类型可以通过内置的函数查询,例如还可以用来判断和的区别在于不会认为子类是一种父类类型。会认为子类是一种父类类型。基本功能是进行成员关系测试和删除重复元素。 ...

    Winer 评论0 收藏0
  • Python 3 学习笔记——数据类型

    摘要:常量的值近似为。在后传入一个整数可以保证该域至少有这么多的宽度表示浮点数保留位小数常量的值近似为。 1. 数字 类型 int, float, bool, complex type() 查看变量类型 isinstance(a, int) 查看变量类型 showImg(https://segmentfault.com/img/remote/1460000016789047); 运算符 ...

    Riddler 评论0 收藏0
  • 走近 Python (类比 JS)

    摘要:作为一名前端开发者,也了解中的很多特性借鉴自比如默认参数解构赋值等,同时本文会对的一些用法与进行类比。函数接收一个函数和一个,这个函数的作用是对每个元素进行判断,返回或,根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新。 showImg(https://segmentfault.com/img/remote/1460000011857550); 本文首发在 个人博客 ...

    shadajin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<