python - 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(*)
是用来解压缩列表的。是否将“花”、“流”和“飞行”作为单独的列表项。
解决方案
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"
在这种情况下。
推荐阅读
- angularjs - 如何访问会话变量,它是角度js中的对象数组
- elasticsearch - 如何在kibana中查看日志
- c# - 在 OIDC 身份验证期间获取关联失败异常
- scala - 在 Scala 中展平嵌套对象
- php - 在 Laravel 中是否有“验证后进行身份验证”的正确方法?
- rails-activestorage - Rails 5.2.0 images.attach 导致 InvalidSignature 错误
- libreoffice-calc - 通过“通用数据有效性表”连接两个单元格?
- python - 简单链接表所需的 SQLAlchemy group_by() 求和帮助
- c# - 如何在c#中的xml之后添加数据并在之后读取xml?
- python - Python多线程产生n个并发线程