Python中的zip()与zip(*)函数的使用方法

liftword3周前 (05-24)技术文章10

提到zip,各位小伙伴想到了啥?是不是压缩包文件呢?

zip()是Python的内建函数,这个函数可能比较抽象,刚开始学习的时候不知道如何使用,学习这个函数更多的是需要了解使用的思想。

zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

语法

zip([iterable, ...])

参数:

  • iterable -- 一个或多个迭代器,如列表等等

返回:元组列表

用法

a = [1,2,3]
b = [4,5,6]
c = [4,5,6,7,8]
z = zip(a,b)
print(z)
# 返回的是一个对象。
# <zip object at 0x000001C4CE93A508>

# 可以用list()将这个对象转换为列表
a = list(z)
print(a)
# [(1, 4), (2, 5), (3, 6)]

print(list(zip(a,c)))
# [(1, 4), (2, 5), (3, 6)] #不能够成对的部分将被舍弃

特殊用法:

zip(*)这个函数也被称为zip()的逆函数,但是我个人认为这个叫法似乎不那么好理解。*这个符号在这里发挥的不是一个乘法的作用,他更像是将*号后面的可迭代对象进行了拆解,然后再传入zip()函数。我们以下面的例子说明:

a = [[1,2,3],[4,5,6]]

print(list(zip(a)))
# [([1, 2, 3],), ([4, 5, 6],)]
# 我们发现这个结果并不是我们想要的,他将a里面的每个list视为一个整体。而我们预期的结果应该是
# [[1,4],[2,5],[3,6]]

print(list(zip(a[0],a[1])))
# [(1, 4), (2, 5), (3, 6)]
# 这就得到了我们想要的结果,而zip(*)所作的事情就是这样,将list in list里面的list进行拆解,传入

print(list(zip(*a)))
# [(1, 4), (2, 5), (3, 6)]
# 与上面的结果一致

通过上面的例子,可以看到,当list in list中有很多List的时候,采取zip(*)可以简化我们的代码。

例子

这里,我们以leetcode的一道题【2500】为例。

如果依照题目的步骤,可以写出如下代码:思路就是重复遍历list in list,每次取出list中的最大值,并移除他,暂时保存在一的列表d中,最后取d中的最大值相加,直到两个列表为空。

class Solution:
    def deleteGreatestValue(self, grid: List[List[int]]) -> int:
        ans = 0
        while grid:
            d = []
            for i in grid:
                if not i:   #如果为空,则跳过
                    continue
                else:
                    d.append(max(i)) #将最大的添加到d中,暂时保存
                    i.remove(max(i)) #从列表中移除最大的值
            if d:
                ans = ans + max(d) #每次循环从d中取最大的相加
            else:
                break
        return ans

如果换个思路,不需要对列表进行这么复杂的操作,如下图:

官方题解代码:

class Solution:
    def deleteGreatestValue(self, grid: List[List[int]]) -> int:
        for i in grid:
            i.sort()
        return sum([max(i) for i in zip(*grid)])

可以看到,代码简洁了不少,避免了大量的循环,提高了运行的效率,相较于原版本有了较大的提升。

总结

zip()函数的使用频率不是特别高,在学习的过程中要注重使用的思路,合理的运用,简化代码,提高运行效率。

相关文章

Python中的zip函数详解,高效组合多个序列

左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。公众号:一点sir,关注领取编程资料在Python中,处理数据时经常需要同时遍历多个序列。zip函数提供了一种简洁的方式来组合这些序列...

Python zip函数核心应用解析:多数据流处理的高效方案

喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。技术价值定位根据PyPI官方统计,Python标准库中zip函数在数据处理场景的使用率达68%。本文通过12个生产级案例,系统解析...

Python zip()函数

Python zip() 是一个通用函数,可用于并行迭代两个或多个可迭代对象。它可以从两个或多个迭代对象创建元组列表,或者将两个字典合并到一个字典中。让我们探讨一下在 Python 中使用 zip()...

Python的zip函数:数据配对的神奇纽带

对话实录小白:(苦恼)我有两个列表,一个存名字,一个存年龄,想把它们对应起来,好麻烦啊!专家:(掏出魔法棒)用zip函数,一键搞定数据配对难题!zip函数基础直击1 zip类接收2个参数iterabl...

仅需3步,轻松恢复ZIP文件密码

当我们为ZIP文件设置密码后,有时可能会忘记这个密码。本文将介绍一种名为“ZIP-Password-BruteForcer”的工具来帮助恢复遗忘的ZIP文件密码。使用这类工具时,请确保您有权访问该文件...