我试图想出一个函数来根据它的原始长度均匀地分割列表的长度。
因此,例如,如果我返回的数据集是2000,我想将其拆分为4.而如果数据集为1500则将其拆分为3.
然后调用函数:
Thread_A_DATA, Thread_B_DATA = split_list( SQL_RETURN )
我想做以下事情:
if len(dataset) <= 1000:
# Split in 2
a, b = split_list(dataset, 2)
if len(dataset) > 1000 or len(dataset) <= 1500:
# Split in 3
a, b, c = split_list(dataset, 3)
# etc etc...
我已经设法使用之前在stackoverflow上找到的代码将数据集拆分为一半:
def split_list( a_list ):
half = len( a_list ) / 2
return a_list[:half], a_list[half:]
但我不能用3,4或5分裂来解决这个问题!
如果有人能提供帮助那就太棒了。
提前致谢。
答案 0 :(得分:2)
Python 3
def splitList(L):
return[L[i:i+500] for i in range(0, len(L), 500)]
Python 2
def splitList(L):
return[L[i:i+500] for i in xrange(0, len(L), 500)]
答案 1 :(得分:2)
据我所知,你不想拆分每500个元素,而是如果少于1000个元素则分为2个,如果小于1500则分为3个,2000个为4个等等。但如果有1700个元素,你会分成4组425个元素(这就是我所理解的“均匀分割”)。
所以,这是我的解决方案:
def split_list(a_list, number_of_splits):
step = len(a_list) / number_of_splits + (1 if len(a_list) % number_of_splits else 0)
return [a_list[i*step:(i+1)*step] for i in range(number_of_splits)]
l = [1, 8, 2, 3, 4, 5, 6, 7, 1, 5, 3, 1, 2, 5]
print l
print split_list(l, 3)
print split_list(l, 2)
[1, 8, 2, 3, 4, 5, 6, 7, 1, 5, 3, 1, 2, 5]
[[1, 8, 2, 3, 4], [5, 6, 7, 1, 5], [3, 1, 2, 5]]
[[1, 8, 2, 3, 4, 5, 6], [7, 1, 5, 3, 1, 2, 5]]
编辑:Python 3版本:
def split_list(a_list, number_of_splits):
step = len(a_list) // number_of_splits + (1 if len(a_list) % number_of_splits else 0)
return [a_list[i*step:(i+1)*step] for i in range(number_of_splits)]
l = [1, 8, 2, 3, 4, 5, 6, 7, 1, 5, 3, 1, 2, 5]
print(l)
print(split_list(l, 3))
print(split_list(l, 2))
答案 2 :(得分:1)
def split_it(a_list,size_of_split):
return zip(*[iter(a_list)]*size_of_split)
很有趣
print split_it(range(100),3) # splits it into groups of 3
不幸的是,如果它没有均匀地划分为split_size,这会截断列表的结尾...你可以像这样修复它
return zip(*[iter(a_list)]*size_of_split) + [tuple(a_list[-(len(a_list)%size_of_split):])]
如果你想把它切成7块,说你可以找到分割的大小
split_size = len(a_list) / num_splits
答案 3 :(得分:0)
Python 2.7
>>> import math
>>> lst = range(35)
>>> t = 3 # how many items to be splited
>>> n = int(math.ceil(len(lst) / float(t)))
>>> res = [lst[i:i+n] for i in range(0, len(lst), n)]
>>> res
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34]]