python内置的一个好玩的函数-zip,并且巧妙的实现按概率随机生成有限个数的字符串。

python有一个比较有意思的内置函数-----zip,可以把传入的两组list进行一个组合变形,再输出子元素为tuple的list,不过变形的方式比较抽象。

举个例子:

A=[1,2,3,4,5,6]
B=[‘a‘,‘b‘,‘c‘,‘d‘]
v1=zip(A,B)

v1的结果为:

[(1, ‘a‘), (2, ‘b‘), (3, ‘c‘), (4, ‘d‘)]

比较直观的理解就是,A和B是两道拉链上的扣子,生成的list的子tuple,每一组tuple就是一对扣好了的扣子,并且从每组list的头一个元素开始“拉拉链”,即A的拉链是从1~6,B的拉链是从a~d,从头拉到结束,很明显拉到d就断扣子了,因此结果就很明显:1-a,2-b,3-c,4-d。5,6错开。

如果这时候要给定一个矩阵,例如3x3,并以以下方式输出:

A1=[1,2,3];A2=[4,5,6];A3=[7,8,9]

A1,A2,A3分别代表矩阵的每一行,现在做以下变化:

A1=[1,2,3]
A2=[4,5,6]
A3=[7,8,9]
zip(A1,A2,A3)

输出结果为:

[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

三道拉链也可以拉起来~

A=-------zip--------B=这里可以看出来,是对原矩阵做转置

这时候让B1,B2,B3分布倒序输出,即输出B1[::-1],B2[::-2],B3[::-3],显然,结果就成了A的顺时针旋转90°的结果

同样,如果传入的是一个嵌套的list,可以通过*的方式输出结果,例如:

zip(*[(1, 4, 7), (2, 5, 8), (3, 6, 9)])
zip(*[[1, 4, 7], [2, 5, 8], [3, 6, 9]])

输出结果均为:

[(1, 2, 3), (4, 5, 6), (7, 8, 9)]

这个看着很抽象的的函数还有一个非常神奇的妙用----按概率随机生成一组字符串

举个例子,比如说,取20个随机字符串,候选的字符串包括a,b,c3个,并且各自出现的概率要求为0.1,0.3,0.6

def random_pick(seq,probabilities):
    x = random.uniform(0, 1)#首先随机生成一个0,1之间的随机数
    cumulative_probability = 0.0
    for item, item_probability in zip(seq, probabilities):#seq代表待输入的字符串,prob代表各自字符串对应的概率
        cumulative_probability += item_probability#只有当累加的概率比刚才随机生成的随机数大时候,才跳出,并输出此时对应的字符串
        if x < cumulative_probability:
            break
        return item

例如:

第一次x=0.09,第一次累加概率为0.1,满足条件,跳出并输出p=0.1的字符

第二次x=0.2,第一次累加概率0.1,不满足再累加至0.4,跳出输出p=0.3的字符

第三次x=0.3,第一次累加概率0.1,不满足再累加至0.4,跳出输出p=0.3的字符

第四次x=0.4,第一次累加概率0.1,不满足再累加至0.4,依然不满足再累加至1,跳出输出p=0.6的字符

于是之后x=0.5,0.6.。。。0.9,均输出p=0.6的字符

显然这样的输出满足这样的概率关系,从而达到了按概率输出随机字符串的效果。

for i in range(10):
    print random_pick("abc",[0.1,0.3,0.6])

输出结果为:

时间: 2024-07-31 02:14:43

python内置的一个好玩的函数-zip,并且巧妙的实现按概率随机生成有限个数的字符串。的相关文章

python内置常用高阶函数(列出了5个常用的)

原文使用的是python2,现修改为python3,全部都实际输出过,可以运行. 引用自:http://www.cnblogs.com/duyaya/p/8562898.html https://blog.csdn.net/cv_you/article/details/70880405 python内置常用高阶函数: 一.函数式编程 •函数本身可以赋值给变量,赋值后变量为函数: •允许将函数本身作为参数传入另一个函数: •允许返回一个函数. 1.map()函数 是 Python 内置的高阶函数,

Python内置函数_数学运算类

本文和大家分享的主要是python内置函数数据运算类相关内容,一起来看看吧,希望对大家学习python 有所帮助. abs abs(x) 求绝对值 · X可以是整型,也可以是复数 · 若X是复数,则返回复数的模 >>> abs(-1)1>>> abs(-3+4j)5.0>>> bin bin(x) 将整数x转换为二进制字符串 >>> bin(2)'0b10'>>> bin(3)'0b11' bool bool([x]

Python补充03 Python内置函数清单

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明. Python内置(built-in)函数随着python解释器的运行而创建.在Python的程序中,你可以随时调用这些函数,不需要定义.最常见的内置函数是: print("Hello World!") 在Python教程中,我们已经提到下面一些内置函数: 基本数据类型 type() 反过头来看看 dir() help() len() 词典 len() 文本文件的输入输出 op

Python补充--Python内置函数清单

Python内置函数 Python内置(built-in)函数随着python解释器的运行而创建.在Python的程序中,你可以随时调用这些函数,不需要定义.最常见的内置函数是: print("Hello World!") 在Python教程中,我们已经提到下面一些内置函数:基本数据类型 type()反过头来看看 dir()   help()    len()词典 len()文本文件的输入输出 open()循环设计 range()   enumerate()    zip()循环对象

python基础9 -----python内置函数2

一.python内置所以函数     Built-in Functions     abs() divmod() input() open() staticmethod() all() enumerate() int() ord() str() any() eval() isinstance() pow() sum() basestring() execfile() issubclass() print() super() bin() file() iter() property() tuple

Python 内置函数sorted()有哪些高级用法?

本文和大家分享的主要是python内置函数sorted()的相关内容,一起来看看吧,希望对大家学习python http://www.maiziedu.com/land/python/有所帮助. 1.对于 Python 内置函数 sorted() ,先拿来跟list(列表)中的成员函数 list.sort() 进行下对比.在本质上,list的排序和内建函数sorted的排序是差不多的,连参数都基本上是一样的. 2.主要的区别在于, list.sort() 是对已经存在的列表进行操作,进而可以改变

[python基础知识]python内置函数map/reduce/filter

python内置函数map/reduce/filter 这三个函数用的顺手了,很cool. filter()函数:filter函数相当于过滤,调用一个bool_func(只返回bool类型数据的方法)来迭代遍历每个序列中的元素. 返回bool_func结果为true的元素的序列(注意弄清楚序列是什么意思)http://blog.csdn.net/bolike/article/details/19997465序列参考</a> 如果filter参数值为None,list参数中所有为假的元 素都将被

python内置函数(三)

python内置函数目前需要知道的如下: 代码: #!/usr/bin/env python# -*- coding:utf-8 -*-# author by lh #map(函数,可迭代的对象)def f1(x): return x+100ret=map(f1,[1,2,3,4,5])for i in ret: print iprint '---------------------------------------'#hash转换成哈希值,节约内存dic={ 'dvfhsuicbfhascj

Python 快速教程(补充篇03): Python内置函数清单

Python内置(built-in)函数随着python解释器的运行而创建.在Python的程序中,你可以随时调用这些函数,不需要定义.最常见的内置函数是: print(“Hello World!”) 在Python教程中,我们已经提到下面一些内置函数: 基本数据类型 type() 反过头来看看 dir() help() len() 词典 len() 文本文件的输入输出 open() 循环设计 range() enumerate() zip() 循环对象 iter() 函数对象 map() fi