__getitem__(self,key): 返回键对应的值。
__setitem__(self,key,value): 设置给定键的值
__delitem__(self,key): 删除给定键对应的元素。
__len__(): 返回元素的数量
【注释】只要实现了 __getitem__ 和 __len__ 方法,就会被认为是序列。
这些魔术方法的原理就是:当我们对类的属性item进行下标的 *** 作时,首先会被 __getitem__()、__setitem__()、__delitem__() 拦截,从而执行我们在方法中设定的 *** 作,如赋值,修改内容,删除内容等等。
这个方法应该以与键相关联的方式存储值,以便之后能够使用 __setitem__ 来获取。当然,这个对象可变时才需要实现这个方法。
举个栗子:
定义一副扑克牌(不包括大小王),对牌进行洗牌,然后发牌。
Output:
【注意】 :我们会发现output中,输出了: slice(1, 3, None) ,下面给出解释。
语法:
参数说明:
slice() 函数实现切片对象,主要用在切片 *** 作函数里的参数传递。
举两个栗子来看看:
Output:
切片原理
output
(程序员必会的 hhhhh.....)
看看slice在python3.7中是怎么描述的:
今天下午,成长群的群主申总提出,群里每个人找一个战友,互帮互助。一石激起千层浪,群里面积极向上好青年们就开始踊跃自我介绍,一个比一个优秀,让人羡慕不已。我正想要参与其中,突然想到我的活学活用系列需要更新了。没有困难,创造困难也要上。于是,仔细想一想,可能出现几种情况:
如果用Python来随机配对,能解决上面的问题。还有一个好处,每个月初,有了新的成员加进来之后,可以重新打乱配对一次,这样每个月都会有一个新的战友配对,就可以结交一个新朋友,岂不更好。
把全体群成员放在一个集合里面,然后随机的从这个集合中挑出两个元素,作为一对战友,然后把这俩哥们从集合中删除,剩下的成员组成了新的集合,再对新的集合重复上面的 *** 作,一直到新的集合为空,程序结束
在Python中可以用list或者set来实现
set和list的区别如下:
set是无序的,不可重复的
list是有序的,可以重复的
直觉上set比较适合,于是查看set的文档,看有没有适合的 *** 作函数。发现set的 *** 作函数有5个:
其中pop()从集合中删除并返回随机的一个元素,好像很符合我的要求,于是动手尝试。
输入的结果如下:
成功了O(∩_∩)O哈哈~
PS:因为可能存在成员数为单数的情况,为了不使程序出错,这里添加了一个try-except
上面是用set实现的,那用list能实现吗?
答案是:可以
查看Python文档,发现一个函数非常适合:random.shuffle,这个家伙能把一个list中的成员洗牌打乱,那么我们就可以按照顺序把大乱以后的list中的成员打印出来,挨着的两个成员就成为战友。实现如下:
输入的结果如下:
成功,而且不会因为单数问题报错,实现起来也比set简单,更重要的一点是程序运行后生成了一个雷暴members保存了所有的战友匹配信息。方便保存。
这里有个知识点是list的切片,list[i:j]返回的是一个小list,是原来list的第i个元素到第j个元素。
如果要应用到群成员配对,只需要把members的内容替换成为愿意程序配对的群成员们就可以啦
set创建和pop()函数
list创建,list切片
random.shuffle(list)给list洗牌
应该是这句代码:def getPuk(x):
return getColor(x) + getValue(x)
把 return getColor(x) + getValue(x) 改成 return getColor(x),getValue(x)试试
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)