我希望在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的答案会产生相反的结果,所以请不要将此问题标记为已经回答
答案 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