Python 如何将列表均匀划分成大小相等的块
列表是Python中经常使用的数据结构之一。列表是一个可变的、有序的元素序列的数据结构。以下是一个整数值列表。
示例
lis= [5, 10, 15, 20, 25]
print(lis)
输出
如果你执行以上代码段,它会产生以下输出。
[5, 10, 15, 20, 25]
让我们讨论在Python中将列表分成均匀大小的块的各种方法。
使用切片操作符
您可以使用切片操作符来打印具有相等大小块的元素列表,并且可以简单地解决它们。
示例
在下面的示例中,我们将10个数字分成了5个相等大小的列表。
lis=[1,2,3,4,5,6,7,8,9,10]
x=0
y=10
for i in range(x,y,2):
x=i
print (lis[x:x+2])
输出
在执行上述程序后,得到以下输出结果。
[1, 2]
[3, 4]
[5, 6]
[7, 8]
[9, 10]
使用yield关键字
yield是Python中的关键字,用于从函数返回,同时保留其局部状态。
简单来说,当我们想要从函数中获得多个返回值(部分解决方案),而不退出函数且不丢失其局部状态时,我们使用yield关键字。
示例1
以下是一个示例程序,演示了在Python中使用yield关键字将一个列表均匀分割成小块的用法。
lis = [10,20,30,40,50,60,70,80,90,100]
def chunks(l, n):
for i in range(0, len(l), n):
yield l[i:i + n]
n = 2
t = list(chunks(lis, n))
print (t)
输出
在执行上述程序后,将生成以下输出。
[[10, 20], [30, 40], [50, 60], [70, 80], [90, 100]]
示例2
我们定义了一个函数来分割下面示例中的列表。
- 使用for循环和range()方法从0迭代到列表的长度,使用chunk的大小作为步长。
- 列表 ‘l[i:i+chunk大小]’ 返回每个chunk;yield返回这些chunk。
def split(l, size_of_chunk):
for i in range(0, len(l), size_of_chunk):
yield l[i:i + size_of_chunk]
size_of_chunk = 4
the_list = [23,56,83,19,38,64,92,56]
print('The evenly sized chunk list is:',list(split(the_list, size_of_chunk)))
输出
执行上述代码后,我们得到以下输出:
The evenly sized chunk list is: [[23, 56, 83, 19], [38, 64, 92, 56]]
使用列表推导
列表推导提供了更短的语法,并允许从元组、列表、字符串、数组等其他可迭代对象创建新的列表。
示例
以下是一个使用列表推导在Python中将列表均匀拆分为多个片段的示例程序。
lis = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 3
x = [lis[i:i + n] for i in range(0, len(lis), n)]
print(x)
输出
执行上述程序后,会产生以下输出结果。
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
使用numpy模块
Python中处理数组的通用包是numpy。它提供了一个具有出色速度的多维数组对象,以及与这些数组交互的工具。
示例
Numpy的array split()方法将一个列表分成相等大小的块。这里有6个独立的块。
import numpy as num
list = [23,56,83,19,38,64,92,56]
print('The evenly sized chunk list is:',num.array_split(list, 6))
输出
以下是上述代码的输出结果 –
The evenly sized chunk list is: [array([23, 56]), array([83, 19]), array([38]), array([64]), array([92]), array([56])]