【发布时间】:2020-08-13 07:26:02
【问题描述】:
分块的代码由这段代码sn-p提供:
def chunks(lst, n): #n here is 4
"""Yield successive n-sized chunks from lst."""
for i in range(0, len(lst), n):
yield lst[i:i + n]
作为输入,我有一个包含以下整数的列表:
[11, 45, 74, 24, 27, 55, 37, 97, 15, 36, 54, 7, 41, 77, 28, 36, 22, 214, 110, 40, 41, 14, 6, 35, 6, 7, 62, 2, 34, 1, 30, 5, 4, 8, 9, 7, 5, 7, 0, 0, 3, 0, 0, 1, 2]
我想用它生成 4 个块。作为输出,我得到以下信息:
[[11, 45, 74, 24, 27, 55, 37, 97, 15, 36, 54, 7],
[41, 77, 28, 36, 22, 214, 110, 40, 41, 14, 6, 35],
[6, 7, 62, 2, 34, 1, 30, 5, 4, 8, 9, 7],
[5, 7, 0, 0, 3, 0, 0, 1, 2]]
我的问题是输出中的第二个列表的权重高于其他列表;数字的分布不太公平。
谁能告诉我如何通过包含整数来公平分配块中的数字?
我亲手做了一个例子:
输入:[11,20,2,4,8,13,16,0,1,0,3,6]
输出:[[20,1,0,0],[16,6],[13,8],[11,4,3,2]]
【问题讨论】:
-
你有衡量你希望分布有多“均匀”吗?一种解决方案是对输入列表进行排序,然后从每个块的 n 个元素中选择 1 个
-
这里是一个整数较少的例子:[11,20,2,4,8,13,16,0,1,0,3,6] 想要输出:[[20,1], [16,6],[13,8],[11,4,3,2]] 这是我手工制作的,我不知道如何编码
-
您可以编辑您的问题以包含最小可重现示例吗?
-
嘿@menbar 我没有理解你的问题。你的例子一开始似乎有点错误...... [16,3,2 应该是一个块,[11,6,4] 应该是另一个正确的?
-
好的。所以你已经知道多进程的事情了吗?如果是,那么我建议您可以从问题中删除多进程标签以消除混淆。