在python中将列表分为3个部分

时间:2014-02-03 13:08:37

标签: python list

我希望在python中将列表分成3个部分。如果列表没有除以3,我希望它“填充”第一列,然后是第二列,然后是第三列。

e.g:

1|2|3

1|3|
2|


1|3|
2|4|

1|3|5
2|4|

1|3|5
2|4|6

等等。

我目前正在做这样的事情,但是没有达到预期的效果。还使用%无效

l = [1,2,3,4,5]
a = [:l/3]
b = [l/3:(l/3)*2 ]
c = [(l/3)*2 :]

所有帮助表示感谢,谢谢

注意 Splitting a list of into N parts of approximately equal length的答案会产生相反的结果,所以请不要将此问题标记为已经回答

3 个答案:

答案 0 :(得分:2)

itertools中有一个食谱会执行此操作:

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

您可以按原样使用此功能,也可以根据需要进行修改。

答案 1 :(得分:0)

以下是我刚刚编写的一些代码。

import math
startArray = [1,2,3,4,5,6,7,8,9]
secLength = math.ceil(len(startArray) / 3)
newArray = []
newArray.append(startArray[:secLength])
newArray.append(startArray[secLength : 2*secLength])
newArray.append(startArray[2*secLength:]);
print(newArray)

对于此示例,返回值为[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

如果您的数组是[1,2,3,4,5,6,7],则会返回[[1, 2, 3], [4, 5, 6], [7]]

答案 2 :(得分:0)

继续尝试解决这个问题,得到了这个:

import math
l = [1,2,3,4,5,6,7]

col = 3
height = int(math.ceil(len(l)/col))

print height
a = l[:height+1]
b = l[height+1:(height+1)*2]
c = l[(height+1)*2:]

print l
print a
print b
print c