python洗牌函数 javascript洗牌函数

68 个 Python 内置函数详解内置函数就是Python给你提供的,拿来直接用的函数,比如print. , input等 。
截止到python版本3.6.2,python一共提供了68个内置函数,具体如下
本文将这68个内置函数综合整理为12大类 , 正在学习Python基础的读者一定不要错过,建议收藏学习!
(1)列表和元组
(2)相关内置函数
(3)字符串
frozenset 创建一个冻结的集合,冻结的集合不能进行添加和删除操作 。
语法:sorted(Iterable, key=函数(排序规则), reverse=False)
语法:fiter(function. Iterable)
function: 用来筛选的函数. 在?lter中会自动的把iterable中的元素传递给function. 然后根据function返回的True或者False来判断是否保留留此项数据 , Iterable: 可迭代对象
搜索公众号顶级架构师后台回复“面试”,送你一份惊喜礼包 。
语法 : map(function, iterable)
可以对可迭代对象中的每一个元素进行映射. 分别去执行 function
hash : 获取到对象的哈希值(int, str, bool, tuple). hash算法:(1) 目的是唯一性 (2) dict 查找效率非常高, hash表.用空间换的时间 比较耗费内存
Python 数据模型 Python 风格的关键完全体现在 Python 的数据模型上 , 数据模型所描述的 API ,为使用最地道的语言特性来构建开发者自己的对象提供了工具 。
当 Python 解析器遇到特殊句法时,会使用特殊方法去激活一些基本的对象操作 。特殊方法以双下划线开头,以双下划线结尾 。如: obj[key]的背后就是__getitem__方法 。魔术方法是特殊方法的昵称,特殊方法也叫双下方法 。
【python洗牌函数 javascript洗牌函数】 使用__getitem__和__len__创建一摞有序的纸牌:
上面的例子,使用collections.namedtuple构建了一个简单的类来表示一张纸牌,namedtuple用以构建只有少数属性但没有方法的类 。
我们自定义的FrenchDeck类可以像任何 python 标准集合类型一样使用len()函数,查看一叠牌有多少张:
也可以像列表一样,使用位置索引,d[i]将调用__getitem__方法:
也可以使用标准库模块提供的random.choice方法,从序列中随机选取一个元素 。下面 , 我们如随机取出一张纸牌:
现在我们已经体会到通过 python 特殊方法,来使用 Python 数据模型的 2 个好处:
因为__getitem__方法把[]操作交给了self.cards列表,所以我们的FrenchDeck实例自动支持切片:
仅仅实现了__getitem__方法 , 这一摞牌即变得可迭代:
运行结果:
也可以直接调用内置的reversed函数 , 反向迭代FrenchDeck实例:
运行结果:
迭代通常是隐式的,比如一个集合类型没有实现__contains__方法,那么in运算符就会按顺序做一次迭代搜索 。
因此,in运算符可以用在我们的FrenchDeck实例上,因为它是可迭代的:
FrenchDeck还可以使用 Python 标准库中的sorted函数,实现排序:
首先定义一个排序依据的函数:
优先按 rank 的大小排序,rank 相同时则比较 suit 的值:
运行结果:
优先按 suit 的大小排序 , suit 相同时则比较 rank 的值:
运行结果:
按照目前的设计,FrenchDeck 还不支持洗牌,因为它是不可变的:
shuffle函数要调换集合中元素的位置,而FrenchDeck只实现了不可变的序列协议,可变的序列还必须提供__setitem__方法:
洗牌:
没有任何的返回值 , 可见random.shuffle就地修改了可变序列d。为便于观察结果,我们定义输入的输出函数:
运行结果:
每次洗牌,都是一个随机的序列: