python压缩函数 python压缩解压

python zip函数zip()函数用于将可迭代python压缩函数的对象作为参考python压缩函数,将对象中对应的元素打包成一个个远足python压缩函数,然后返回有这些元祖组成的列表 。
zip([iterabale,....])
python 当中的zip( )函数到底是干嘛的?这个可以理解为拉链python压缩函数,将两个list拉到一起来,每个对应元素做一定操作后,合并成一个list.
【python压缩函数 python压缩解压】比如python压缩函数:
zip([1,2,3],['a','b','c'])
结果是
[(1,
'a'),
(2,
'b'),
(3,
'c')]
Python for 取ZIP函数值zip() 方法返回的是一个zip对象不能使用迭代遍历 , 你把它改成 for i in list(k) 就可以了
Python 之内置函数:filter、map、reduce、zip、enumerate这几个函数在 Python 里面被称为高阶函数,本文主要学习它们的用法 。
filter 函数原型如下:
第一个参数是判断函数(返回结果需要是 True 或者 False),第二个为序列,该函数将对iterable序列依次执行function(item)操作,返回结果是过滤之后结果组成的序列 。
简单记忆:对序列中的元素进行筛选,获取符合条件的序列 。
返回结果为:,使用list函数可以输入序列内容 。
map 函数原型如下:
该函数运行之后生成一个 list,第一个参数是函数、第二个参数是一个或多个序列;
下述代码是一个简单的测试案例:
上述代码运行完毕,得到的结果是:。使用print(list(my_new_list))可以得到结果 。
map函数的第一个参数,可以有多个参数,当这种情况出现后,后面的第二个参数需要是多个序列 。
map 函数解决的问题:
reduce 函数原型如下:
第一个参数是函数 , 第二个参数是序列,返回计算结果之后的值 。该函数价值在于滚动计算应用于列表中的连续值 。
测试代码如下:
最终的结果是 6,如果设置第三个参数为 4,可以运行代码查看结果,最后得到的结论是,第三个参数表示初始值,即累加操作初始的数值 。
简单记忆:对序列内所有元素进行累计操作 。
zip 函数原型如下:
zip函数将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表 。
如果各个迭代器的元素个数不一样 , 则返回列表长度与最短的对象相同,利用星号(*)操作符 , 可以将元组解压为列表 。
测试代码如下:
展示如何利用*操作符:
输出结果如下:
简单记忆:zip 的功能是映射多个容器的相似索引,可以方便用于来构造字典 。
enumerate 函数原型如下:
参数说明:
该函数用于将一个可遍历的数据对象组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中 。
测试代码如下:
返回结果为:。
本文涉及的函数可以与 lambda 表达式进行结合 , 能大幅度提高编码效率 。最好的学习资料永远是官方手册
python zip函数的用法定义:zip([iterable, ...])
zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些 tuples组成的list(列表) 。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同 。利用*号操作符 , 可以将list unzip(解压),看下面的例子就明白了:
1 2 3 4 5 6 7 8 9
a = [1,2,3]b = [4,5,6]c = [4,5,6,7,8]zipped = zip(a,b) [(1, 4), (2, 5), (3, 6)]zip(a,c) [(1, 4), (2, 5), (3, 6)]zip(*zipped) [(1, 2, 3), (4, 5, 6)]
对于这个并不是很常用函数,下面举几个例子说明它的用法:
* 二维矩阵变换(矩阵的行列互换)
比如我们有一个由列表描述的二维矩阵
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
通过python列表推导的方法,我们也能轻易完成这个任务
1 2
print [ [row[col] for row in a] for col in range(len(a[0]))] [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
另外一种让人困惑的方法就是利用zip函数:
1 2 3 4 5
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]zip(*a) [(1, 4, 7), (2, 5, 8), (3, 6, 9)]map(list,zip(*a)) [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
这种方法速度更快但也更难以理解,将list看成tuple解压,恰好得到我们“行列互换”的效果,再通过对每个元素应用list()函数,将tuple转换为list
* 以指定概率获取元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
import randomdef random_pick(seq,probabilities):x = random.uniform(0, 1)cumulative_probability = 0.0for item, item_probability in zip(seq, probabilities):cumulative_probability= item_probabilityif xcumulative_probability: breakreturn itemfor i in range(15):random_pick("abc",[0.1,0.3,0.6])'c' 'b' 'c' 'c' 'a' 'b' 'c' 'c' 'c' 'a' 'b' 'b' 'c' 'a' 'c'
这个函数有个限制,指定概率的列表必须和元素一一对应,而且和为1 , 否则这个函数可能不能像预想的那样工作 。
稍微解释下,先利用random.uniform()函数生成一个0-1之间的随机数并复制给x,利用zip()函数将元素和他对应的概率打包成tuple,然后将每个元素的概率进行叠加,直到和大于x终止循环
这样,”a”被选中的概率就是x取值位于0-0.1的概率 , 同理”b”为0.1-0.4,”c”为0.4-1.0,假设x是在0-1之间平均取值的,显然我们的目的已经达到
6 个值得玩味的 Python 代码先选取了 6 个自己认为值得玩味的 python代码,希望对正在学习 python 的你有所帮助 。
1、类有两个方法,一个是 new,一个是 init,有什么区别,哪个会先执行呢?
运行结果如下:
再来看另一个例子
运行结果如下:
这里给出官方的解释:init作用是类实例进行初始化,第一个参数为 self , 代表对象本身,可以没有返回值 。new则是返回一个新的类的实例 , 第一个参数是 cls 代表该类本身,必须有返回值 。很明显,类先实例化才能产能对象 , 显然是new先执行,然后再init,实际上 , 只要new返回的是类本身的实例,它会自动调用init进行初始化 。但是有例外,如果new返回的是其他类的实例,则它不会调用当前类的init。下面我们分别输出下对象 a 和对象 b 的类型:
可以看出,a 是 test 类的一个对象,而 b 就是 object 的对象 。
2、map 函数返回的对象
map()函数第一个参数是 fun,第二个参数是一般是 list , 第三个参数可以写 list,也可以不写,作用就是对列表中 list 的每个元素顺序调用函数 fun。
有没有发现,第二次输出 b 中的元素时,发现变成空了 。原因是 map() 函数返回的是一个迭代器 , 并用对返回结果使用了 yield,这样做的目的在于节省内存 。举个例子:
执行结果为:
这里如果不用 yield,那么在列表中的元素非常大时 , 将会全部装入内存,这是非常浪费内存的,同时也会降低效率 。
3、正则表达式中 compile 是否多此一举?
比如现在有个需求,对于文本中国,用正则匹配出标签里面的“中国” , 其中 class 的类名是不确定的 。有两种方法,代码如下:
这里为什么要用 compile 多写两行代码呢? 原因是 compile 将正则表达式编译成一个对象,加快速度 , 并重复使用 。
4、[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]
5、一行代码将字符串 "-" 插入到 "abcdefg"中每个字符的中间
这里也建议多使用 os.path.join() 来拼接操作系统的文件路径 。
6、zip 函数
zip() 函数在运算时 , 会以一个或多个序列(可迭代对象)做为参数,返回一个元组的列表 。同时将这些序列中并排的元素配对 。zip() 参数可以接受任何类型的序列,同时也可以有两个以上的参数;当传入参数的长度不同时,zip 能自动以最短序列长度为准进行截取,获得元组 。
python压缩函数的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于python压缩解压、python压缩函数的信息别忘了在本站进行查找喔 。

    推荐阅读