Python根据原始列表长度将列表拆分为较小的列表

时间:2013-11-13 17:29:57

标签: python arrays list split dataset

我试图想出一个函数来根据它的原始长度均匀地分割列表的长度。

因此,例如,如果我返回的数据集是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分裂来解决这个问题!

如果有人能提供帮助那就太棒了。

提前致谢。

4 个答案:

答案 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]]