【发布时间】:2020-03-21 04:22:12
【问题描述】:
处理一项作业,其中一个部分要求我将列表拆分为“x”个列表块,但我不一定要使用列表中的元素来这样做,因为我已经看到了很多示例这样做。例如,给定列表[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],我想将此列表分成3 个偶数部分([[1,2,3,4,5],[6,7,8,9,10],[11,12,14,15]])。
我在这里看到的大多数示例都倾向于将整个列表除以“x”,而不是将其分成“x”组,最终给我一个像 [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]] 这样的列表。
编辑:
我已经想出了如何在我正在寻找的这个问题的第一部分中获得所需的输出,但是在进一步查看我的作业后,我意识到需要制作的列表必须以lst 而不必输入一个值,该值将在该范围内生成一个列表。例如,如果我想打印出像[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]] 这样的分组列表,我不想必须将lst 设置为lst = list(range(1,lst+1)),然后当我为我的函数分配值时,我希望能够用 5 代替 15 得到相同的结果。
def test(num, lst, start = 1):
lst = list(range(start,lst+1))
avg = len(lst) / float(num)
out = []
last = 0.0
while last < len(lst):
out.append(lst[int(last):int(last + avg)])
last += avg
return out
print (test(3,15))
【问题讨论】:
-
简单算术。如果您想要
x列表中的n项目组,那么您只需要计算n / x,然后您可以将整个列表除以该结果。给定 5 组包含 20 个元素的列表,您需要每 4 个项目拆分一次。 -
你能澄清一下这些部分吗? “不使用里面的元素” ... “我不一定想使用列表里面的元素来做”.
-
顺便说一句,代码输出不包括 15。看起来您刚刚忘记添加 1:
list(range(1, lst+1))