首页 > 解决方案 > Python 中的 zip(*) 功能

问题描述

我在 Python 中有这段代码,我必须在下面的列表中打印不重复的字母。就像输出应该是'fl'因为'fl'在所有三个字符串中都很常见:

x=["flower","flow","flight"]

print([i for i in zip(*x)])

它打印以下输出:

[('f', 'f', 'f'), ('l', 'l', 'l'), ('o', 'o', 'i'), ('w', 'w', 'g')]

它是如何工作的?我知道那zip(*)是用来解压缩列表的。是否将“花”、“流”和“飞行”作为单独的列表项。

标签: pythonpython-3.xpython-2.7

解决方案


zip适用于任何类型的可迭代类型。虽然它最常与列表一起使用,但任何可迭代对象都可以使用。字符串是可迭代的,每次迭代都返回字符串中的下一个字符。

所以迭代一个字符串就像"flower"迭代列表一样["f", "l", "o", "w", "e", "r"]。因此,当您压缩多个字符串时,它会将相应的字符分组,就像您压缩类似列表时一样。

写作zip(*x)利用了参数解包。的每个元素都x成为 的单独参数zip。所以它相当于写:

zip(x[0], x[1], x[2])

这相当于:

zip("flower", "flow", "flight")

最终结果只有 4 个元素,因为zip当它到达最短输入的末尾时停止,"flow"在这种情况下。


推荐阅读