Python zip zip_longest

参考内置函数——python 3.10 文档

一、zip 函数

help(zip)
Help on class zip in module builtins:class zip(object)|  zip(*iterables) --> A zip object yielding tuples until an input is exhausted.|  |     >>> list(zip('abcdefg', range(3), range(4)))|     [('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]
1、创建一个聚合了来自每个可迭代对象中的元素的迭代器,返回一个元组的迭代器。
2、其中的第 i 个元组包含来自每个参数序列或可迭代对象的第 i 个元素。
3、当所输入可迭代对象中最短的一个被耗尽时,迭代器将停止迭代。
4、当只有一个可迭代对象参数时,它将返回一个单元组的迭代器。
5、不带参数时,它将返回一个空迭代器。
a = [1,2,3]
print(list(zip(a)))  # 只有一个可迭代参数
# 输出:[(1,), (2,), (3,)]a = [1,2,3]
b = [4,5,6]
print(list(zip(a,b)))  # 两个可迭代参数长度相同时
# 输出:[(1, 4), (2, 5), (3, 6)]a = [1,2,3,4]
b = [5,6,7]
print(list(zip(a,b))) # 两个可迭代参数长度不同时,按最短的组合输出
# 输出:[(1, 5), (2, 6), (3, 7)]a = [[1,2,3], [4,5,6]]
b = [[7,8,9], [10,11,12]]
print(list(zip(a,b)))
# 输出:[([1, 2, 3], [7, 8, 9]), ([4, 5, 6], [10, 11, 12])]

1、zip(args) 逆操作

result = zip(a, b)
origin = zip(*result)  # 前面加*号,事实上*号也是一个特殊的运算符,叫解包运算符

可以得到原来的 a 和 b。

*zip() 的用法

list1 = ["A", "B", "C", "D", "E"]
list2 = ["a", "b", "c", "d", "e"]
temp = zip(list1, list2)
a, b = zip(*temp)
print(a,b) #('A', 'B', 'C', 'D', 'E') ('a', 'b', 'c', 'd', 'e')
print(list(zip(*zip(list1, list2))))
l1, l2 = zip(*zip(list1,list2))
print(l1,"\t",l2) x = [5,6,7]
print(list(zip(* [x] * 3)))  #[(5, 5, 5), (6, 6, 6), (7, 7, 7)]
# zip(* [x] * 3) 等价于 zip(x, x, x)

2、同时遍历多个字典

在 Python 3.6+ 中,字典成为了一种有顺序的集合。利用这个特性和 zip,我们可以同时遍历多个字典:

>>> dict_one = {'name': 'John', 'last_name': 'Doe', 'job': 'Python Consultant'}
>>> dict_two = {'name': 'Jane', 'last_name': 'Doe', 'job': 'Community Manager'}
>>> for (k1, v1), (k2, v2) in zip(dict_one.items(), dict_two.items()):
...     print(k1, '->', v1)
...     print(k2, '->', v2)
...
name -> John
name -> Jane
last_name -> Doe
last_name -> Doe
job -> Python Consultant
job -> Community Manager

3、对多个元素同时进行排序

names = ['John', 'Amy', 'Jack']
scores = [98, 100, 85]
data = list(zip(names, scores))
data.sort()
# [('Amy', 100), ('Jack', 85), ('John', 98)]# 对分数进行排序
data2 = list(zip(scores, names))
data2.sort()
# [(85, 'Jack'), (98, 'John'), (100, 'Amy')]

4、将数据成对进行计算

假设你有这样一个表格:

一月 二月 三月
销售额 52,000.00 51,000.00 48,000.00
成本 46,800.00 45,900.00 43,200.00

利润 = 销售额 - 成本,求每月的利润:

total_sales = [52000.00, 51000.00, 48000.00]
prod_cost = [46800.00, 45900.00, 43200.00]
for sales, costs in zip(total_sales, prod_cost):profit = sales - costsprint(f'Total profit: {profit}')

结果是:

Total profit: 5200.0
Total profit: 5100.0
Total profit: 4800.0

5、构建字典

将两个列表合并起来,得到一个姓名-分数的字典:

stu = dict(zip(names, scores))
# {'John': 98, 'Amy': 100, 'Jack': 85}

6、矩阵的点乘、相加和相减。

m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
n = [[2, 2, 2], [3, 3, 3], [4, 4, 4]]
#矩阵点乘
mat_pointmul = [ x * y for a, b in zip(m, n) for x, y in zip(a, b)]
print(mat_pointmul) #[2, 4, 6, 12, 15, 18, 28, 32, 36]
#矩阵相加,相减同理
mat_sum = [ x + y for a, b in zip(m,n) for x, y in zip(a, b)]
print(mat_sum)  #[3, 4, 5, 7, 8, 9, 11, 12, 13]

7、字符串处理

14. 最长公共前缀

方法一:

class Solution:def longestCommonPrefix(self, strs: List[str]) -> str:if len(strs) == 0: return ""        x = strs[0]for i,c in enumerate(x):        for y in strs[1:]:if len(y) <= i or c != y[i]:return x[:i]return x

方法二:zip

class Solution:def longestCommonPrefix(self, strs: List[str]) -> str:result = ""for temp in zip(*strs):if len(set(temp)) != 1: return resultresult += temp[0]return result

二、zip_longest 函数

zip_longest 与 zip 函数唯一不同的是如果两个可迭代参数长度不同时,按最长的输出,长度不足的用 fillvalue 进行代替,默认为 None。

help(zip_longest)
Help on class zip_longest in module itertools:class zip_longest(builtins.object)|  zip_longest(iter1 [,iter2 [...]], [fillvalue=None]) --> zip_longest object

例:

from itertools import zip_longesta = [1,2,3,4]
b = [5,6,7]
print(list(zip_longest(a,b)))
# 输出:[(1, 5), (2, 6), (3, 7), (4, None)]

Python zip zip_longest相关推荐

  1. python zip函数_相当于Python的zip函数

    下面是一个更时髦的ECMAScript 6版本:zip= rows=>rows[0].map((_,c)=>rows.map(row=>row[c])) 插图等价物到Python{z ...

  2. zip函数的用法python_Python zip函数 python zip函数的用法

    python 当中的zip( )函数到底是干嘛的? zip([1,2,3],['a','b','c']) 结果是 [(1, 'a'), (2, 'b'), (3, 'c')] 就是依次取出每一个数组的 ...

  3. Python zip函数 - Python零基础入门教程

    目录 一.Python zip 函数简介 二.Python zip 函数使用 三.Python *zip 函数的描述和使用 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 ...

  4. [Python] zip() 函数

    Python zip() 函数 功能: zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象 .(注意:返回值是对象!) 我们可以使用 list ...

  5. [转载] python zip 文件解压中文乱码问题解决

    参考链接: Python zip() 今天突然碰到zip文件解压后中文乱码问题.百度了下觉得这篇文章不错.保存保存. 来源:http://blog.sina.com.cn/s/blog_5805e98 ...

  6. python zip函数_Python zip()函数

    python zip函数 Good day learners, hope that you are doing well. We discussed about Python Modulo in ou ...

  7. Python zipfile – Python ZIP

    Python zipfile module helps us in working with zip files. Today we will learn how to read zip archiv ...

  8. Python - zip() 函数

    文章目录 Python - zip() 函数 相关内容:Python 实用内容 1.描述 2.代码 Python - zip() 函数 相关内容:Python 实用内容 PyCharm安装配置Qt D ...

  9. python zip函数dict_python zip()函数的使用示例

    zip()函数将可迭代的对象作为参数,将对象对应的元素打包成一个个元祖,然后返回由这些元祖组成的对象,我们可以使用list()转换成列表 如果各个迭代器的元素个数不一致,则返回列表长度和最小的对象相同 ...

  10. Python zip函数详解+和izip和zip_longest的比较辨析

    目录 1. zip()函数 1.1 zip()函数的用法 1.2 zip()函数的应用 1.3 *zip()的用法 2. itertools.izip() 3. itertools.zip_longe ...

最新文章

  1. android opencv 书籍,opencv android
  2. mysql8.0 linux安装自启动_Linux系统安装部署MySQL8.0.12特详细教程
  3. 君士坦丁堡分叉引起的安全问题
  4. pylucene构建索引_java-Apache Lucene:建立索引时如何使用TokenSt...
  5. LCD也可以模拟?这款模拟器别错过了!
  6. 关于计算机软件系统的知识,二、计算机软件系统基本知识
  7. P5304-[GXOI/GZOI2019]旅行者【最短路】
  8. html5语义化标签 加粗,html5标签 H5标签
  9. 伦敦帝国学院提出局部特征提取新模式D2D:先描述后检测
  10. 如何解决Error: failed PB timebomb check
  11. 一些javascript的经验 (3)
  12. HDU2044 一只小蜜蜂...【递推】
  13. 一个32岁入门的70后程序员给我的启示
  14. asp mysql性能_asp和mysql分页代码
  15. 实现国标GB/T28181流媒体服务解决方案EasyGBS之GB35114和GB28181的注册信令流程简介
  16. 鹰式价差matlab,蝶式及鹰式价差组合策略
  17. 设置透明主题引起动画失效以及打开其他应用闪现桌面图标的问题
  18. R-FCN论文解读及难点理解
  19. 你为什么要去做微商?
  20. scp 自定义端口号

热门文章

  1. 利用.sym跨平台解析iOS符号
  2. python画图网格线设置_python – Matplotlib:更改单个网格线的颜色
  3. 软件测试好学吗 入门还是很好学的,但想要深造就还是要费功夫
  4. 安卓手机格式化怎么弄_安卓手机格式化教程、安卓手机怎么格式化-百度经验...
  5. Android push到/system/app下,导致找不到so文件,抛出java.lang.UnsatisfiedLinkError的原因分析和解决方案
  6. C#WinForm程序 窗口不在任务栏显示的处理方法
  7. 互联网思维之流量思维
  8. 程序员才是真正的段子手
  9. 《Matlab算法》 part1 误差分析
  10. 【渝粤教育】电大中专计算机网络基础_1作业 题库