首页  >  文章  >  后端开发  >  Python 中 `zip([iter(s)]*n)` 如何对列表进行分块?

Python 中 `zip([iter(s)]*n)` 如何对列表进行分块?

DDD
DDD原创
2024-11-24 22:26:15650浏览

How does `zip([iter(s)]*n)` Chunk a List in Python?

用于分块列表的 Zip:了解 zip([iter(s)]n)

The zip() function 是 Python 中的一个强大工具,它将多个可迭代对象中的元素组合成元组列表。它的用途扩展到各种应用程序,包括将列表分割成大小相等的块。表达式 zip([iter(s)]n) 是实现此目的的一种简洁方法。

要了解此表达式的工作原理,让我们将其分解为多个组件:

  • iter(s): 这会在 list 上创建一个迭代器,允许我们单步遍历它的元素一个接一个。
  • [iter(s)]*n: 此行创建一个包含 n 个迭代器副本的列表,有效地为同一列表提供 n 个视图。
  • *: 星号(或 splat)运算符将迭代器列表解包为单独的参数zip().

因此,使用 n 个迭代器调用 zip(),每个迭代器代表相同的列表。这会导致 zip() 从每个迭代器中提取一个元素,创建一个元组。这个过程一直持续到所有迭代器都用完为止,产生一个元组列表。

为了说明这一点,让我们考虑一个列表 s = [1,2,3,4,5,6,7,8 ,9] 且 n = 3。表达式 zip([iter(s)]n) 将产生[(1,2,3),(4,5,6),(7,8,9)].

如果我们将表达式扩展为更详细的代码,它将如下所示:

x = iter(s)
y = iter(s)
z = iter(s)
chunked_list = list(zip(x, y, z))

此代码产生与简洁表达式 zip([iter(s)]n) 相同的结果。本质上,iter() 创建一个迭代器,[iter(s)]*n 生成多个视图到同一个列表中,splat 运算符解压迭代器,使 zip() 能够将每个视图中的元素组合成元组。

以上是Python 中 `zip([iter(s)]*n)` 如何对列表进行分块?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn