如何以数字的平方长度将列表拆分为列表列表?

时间:2020-06-25 00:31:04

标签: python-3.x

让我说我有这个清单:

bootstrap.servers=windowsIP:9092,windowsIP:9093

,我有代表列表长度的数字k。 我想得到的是拆分列表,列表列表的长度是k的平方, 所以这就是我需要得到的:

all list is:  [512, 512, 2048, 512, 2048, 2048, 2048, 512, 256]

之后,我想对所有子列表进行排序

[[512, 512, 2048], [512, 2048, 2048],[2048, 512, 256]]

什么是最好的方法?

1 个答案:

答案 0 :(得分:0)

我首先要提到的是您要的二维数组的长度等于k * k,但是在您的示例中,二维数组的长度为3,它的平方根不干净。话虽如此,要实现上述目标,您可以执行以下操作:

def chunk(iterable, k):
    n = k**2
    for i in range(0, len(iterable), n):
        yield iterable[i:i + n]


values = [512, 512, 2048, 512, 2048, 2048, 2048, 512]
k = 2

chunked = []
for piece in chunk(values, k):
    chunked.append(piece)

print(chunked)
>>> [[512, 512, 2048, 512], [2048, 2048, 2048, 512]]

我不能说这是“最好的方法”,但这是实现目标的一种方法。

编辑来自OP的评论

目标是使较小的列表等于k的平方根长度,而不是平方。

import math

def chunk(iterable, k):  
    for i in range(0, len(iterable), math.ceil(math.sqrt(k))): 
        yield sorted(iterable[i:i + math.ceil(math.sqrt(k))])