1

我正在尝试提出一个函数来根据列表的原始长度平均分割列表的长度。

因此,例如,如果我返回的数据集为 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

4 回答 4

2

蟒蛇 3

def splitList(L):
  return[L[i:i+500] for i in range(0, len(L), 500)]

蟒蛇2

def splitList(L):
  return[L[i:i+500] for i in xrange(0, len(L), 500)]
于 2013-11-13T17:31:43.700 回答
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))
于 2013-11-13T17:54:34.127 回答
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
于 2013-11-13T17:32:57.600 回答
0

蟒蛇 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]]
于 2013-11-14T03:16:03.880 回答