如何将 Python 列表或可迭代对象分割成块

2025年1月11日 | 阅读 8 分钟

在本教程中,我们将学习将 Python 列表或其他可迭代对象分割成块的各种选项。

迭代器方法

Python 中的迭代器是一种用于遍历列表、元组、字典和集合等可迭代对象的项的工具。迭代器对象使用 iter() 方法进行实例化。它使用 next() 方法进行迭代。

  • __iter__(): iter() 方法是迭代器的实例化所必需的。它返回一个迭代器对象。
  • __next__(): next() 方法返回可迭代对象的下一个值。当我们使用 for 循环遍历任何可迭代对象时,它会在内部使用 iter() 方法获取迭代器对象,然后该对象使用 next() 方法进行迭代。此方法会引发 StopIteration 异常以指示迭代结束。

下面是一个使用迭代器和 yield 关键字将 Python 列表分割成大小相等的块的示例。

示例

输出

The list after dividing into smaller chunks is: 
[10, 20, 30]
[40, 50, 60]
[70, 80, 90]

split_list 函数接受两个参数:一个列表 list 和一个整数 chunk_size,它指定每个块的大小。该函数使用 for 循环遍历列表,并 yield 一个子列表列表,该列表从当前索引开始,到当前索引加上块大小结束。

以下是代码工作原理的分步说明:

  • 调用 split_list 函数,传入列表 list 和块大小 chunk_size。
  • for 循环遍历列表,从索引 0 开始,每次将索引增加 chunk_size。例如,如果块大小是 3,第一个迭代将从索引 0 开始,第二个迭代将从索引 3 开始,第三个迭代将从索引 6 开始,依此类推。
  • 在每次迭代中,yield 关键字会生成一个子列表列表,该列表从当前索引开始,到当前索引加上块大小结束。例如,如果当前索引是 0 且块大小是 3,则子列表将是 list[0:3],即列表的前三个元素。
  • 然后,示例代码中的 for 循环遍历 split_list 生成的块,并打印每个块。

结果是列表被分成 N 个块。

For 循环方法

在 Python 中,for 循环常用于遍历列表、元组或字符串等可迭代对象。遍历是遍历序列的过程。如果我们有一段代码想重复执行特定次数,我们就会使用 for 循环。for 循环通常用于可迭代对象,例如列表或内置的 range() 函数。Python 中的 for 语句会遍历序列的元素,每次执行一个代码块。for 循环与“while”循环相反,“while”循环用于每次需要检查条件或需要无限期地重复一段代码的情况。

For 循环的语法

在每次迭代中,值是获取可迭代序列中元素的那个元素的值。如果序列中存在表达式语句,则先处理它。然后将迭代变量 iterating_variable 分配给序列中的第一个元素。之后,执行关联的代码块。只要序列完成并且序列中的每个元素都分配给 iterating_variable,就执行语句块。

这里是另一种在 Python 中分割列表成块的方法。此方法使用 for 循环和列表,因此比前面的示例更适合初学者。

以下是您需要执行的步骤:

  • 确定要将列表分割成的块数。我们称此数字为 n。
  • 对列表长度进行整除 n 以找到每个块的大小(整除会向下取整,因此块大小不是 3.3333,而是 3)。我们称此数字为 chunk_size。
  • 使用 range() 函数创建一个数字列表,这些数字指定每个块的开始索引。如果原始列表有 10 个元素,并且您想将其分成 3 个块,则开始索引列表将是 [0, 3, 6]。
  • 使用 for 循环遍历开始索引列表,并使用列表 [start: end] 语法从原始列表中提取每个块。

以下是执行这些步骤的代码。请务必仔细阅读注释以随时掌握它。

程序

输出

The list after dividing into smaller chunks is: [[10, 20, 30, 40], [50, 60, 70, 80], [90, 100]]

While 循环方法

Python 的 while 循环只要给定条件(即条件表达式)为真,就会执行一个代码块的迭代。

如果我们不知道循环将执行多少次,我们可以编写一个无限循环。

Python While 循环的语法

给定条件(即条件表达式)在 Python while 循环中首先进行评估。然后,如果条件表达式返回布尔值 True,则执行 while 循环语句。当代码块完成执行后,将再次检查条件表达式。此过程反复进行,直到条件表达式返回布尔值 False。

Python while 循环的语句由空格控制。代码块在语句缩进时开始,在第一个未缩进的语句处结束。Python 中任何非零数字都被解释为布尔值 True。False 被解释为 None 和 0。

在之前的示例中,您使用了 for 循环将列表分割成块。既然您可以使用 for 循环,您当然也可以用 while 循环做到这一点!

这是使用 while 循环时的代码样子:

示例

输出

This code delivers the accompanying result:
[[10, 20, 30, 40], [50, 60, 70, 80], [90, 100]]

此解决方案创建了一个空列表来存储结果块,然后使用 while 循环按块大小迭代原始列表,将每个块附加到块列表中。index 变量用于跟踪列表中的当前位置,并在每次迭代时更新为下一个块。

使用 NumPy 分割成 N 个块

NumPy 代表数值 Python,它是用于计算和处理复杂和单层数组元素的 Python 包。Travis Oliphant 于 2005 年将先驱模块 Numeric 的功能注入到一个新模块 Numpy array 中,从而创建了 NumPy 包。它是 Python 的一个扩展模块,主要用 C 编写。它提供了各种能够高速执行数值计算的功能。

NumPy 提供了各种强大的数据结构,实现了多维数组和矩阵。这些数据结构用于数组和矩阵的最佳计算。

在 Python 中,有一个流行的数学和科学模块称为 NumPy,科学 Python 社区经常使用它。

如果您已经在使用 NumPy,您可以使用 array_split() 函数将列表分割成块。此函数将列表作为第一个参数,将块的大小作为第二个参数。

示例

输出

This code delivers the accompanying result:
[ array ([10, 20, 30, 40]), array ([50, 60, 70, 80]), array ([90, 100])]