将清单大致等份的最佳方法是什么?例如,如果列表有7个元素,并将其分为2部分,我们希望其中一部分有3个元素,而另一部分应该有4个元素。
我正在寻找类似even_split(L, n)的东西,它将L分解为n部分。
def chunks(L, n):
""" Yield successive n-sized chunks from L.
"""
for i in range(0, len(L), n):
yield L[i:i+n]
上面的代码给出了3个块,而不是3个块。我可以简单地转置(遍历这个,取每列的第一个元素,称之为第一部分,然后取第二个元素,把它放在第二部分,等等),但这破坏了项目的顺序。
假设你想把一个列表[1、2、3、4、5、6、7、8]分成3个元素列表
如[[1,2,3],[4,5,6],[7,8]],如果剩下的最后一个元素小于3,则将它们分组在一起。
my_list = [1, 2, 3, 4, 5, 6, 7, 8]
my_list2 = [my_list[i:i+3] for i in range(0, len(my_list), 3)]
print(my_list2)
输出:[[1,2,3],[4,5,6],[7,8]]
其中一部分的长度为3。用你自己的块大小替换3。
使用numpy实现。linspace方法。
只需指定要将数组分成的部分的数量。各部门的规模将几乎相同。
例子:
import numpy as np
a=np.arange(10)
print "Input array:",a
parts=3
i=np.linspace(np.min(a),np.max(a)+1,parts+1)
i=np.array(i,dtype='uint16') # Indices should be floats
split_arr=[]
for ind in range(i.size-1):
split_arr.append(a[i[ind]:i[ind+1]]
print "Array split in to %d parts : "%(parts),split_arr
给:
Input array: [0 1 2 3 4 5 6 7 8 9]
Array split in to 3 parts : [array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8, 9])]
#!/usr/bin/python
first_names = ['Steve', 'Jane', 'Sara', 'Mary','Jack','Bob', 'Bily', 'Boni', 'Chris','Sori', 'Will', 'Won','Li']
def chunks(l, n):
for i in range(0, len(l), n):
# Create an index range for l of n items:
yield l[i:i+n]
result = list(chunks(first_names, 5))
print result
从这个链接中选择,这对我很有帮助。我有一个预先定义好的列表。
假设你想把一个列表[1、2、3、4、5、6、7、8]分成3个元素列表
如[[1,2,3],[4,5,6],[7,8]],如果剩下的最后一个元素小于3,则将它们分组在一起。
my_list = [1, 2, 3, 4, 5, 6, 7, 8]
my_list2 = [my_list[i:i+3] for i in range(0, len(my_list), 3)]
print(my_list2)
输出:[[1,2,3],[4,5,6],[7,8]]
其中一部分的长度为3。用你自己的块大小替换3。
舍入linspace并将其用作索引是一种比amit12690建议的更简单的解决方案。
function chunks=chunkit(array,num)
index = round(linspace(0,size(array,2),num+1));
chunks = cell(1,num);
for x = 1:num
chunks{x} = array(:,index(x)+1:index(x+1));
end
end