前言:
当前朋友们对“python中什么”都比较关怀,大家都想要知道一些“python中什么”的相关资讯。那么小编同时在网上收集了一些对于“python中什么””的相关内容,希望我们能喜欢,同学们快快来了解一下吧!提到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中什么