如何将列表随机划分为n个几乎相等的部分?
我已阅读 将列表切成 n 的答案 -等长分区[重复]问题。
这是接受的答案:
def partition(lst, n):
division = len(lst) / float(n)
return [ lst[int(round(division * i)): int(round(division * (i + 1)))] for i in xrange(n) ]
我想知道如何修改这些解决方案,以便将项目随机分配到分区而不是增量分配。
I have read the answers to the Slicing a list into n nearly-equal-length partitions [duplicate] question.
This is the accepted answer:
def partition(lst, n):
division = len(lst) / float(n)
return [ lst[int(round(division * i)): int(round(division * (i + 1)))] for i in xrange(n) ]
I am wondering, how does one modify these solutions in order to randomly assign items to a partition as opposed to incremental assignment.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
调用
random.shuffle()
分区之前列出。Call
random.shuffle()
on the list before partitioning it.完整的 2018 年解决方案(python 3.6):
小心!这可能会改变您的原始列表
Complete 2018 solution (python 3.6):
Beware! this may mutate your original list
随机播放输入列表。
shuffle input list.
首先,将列表随机化,然后将其分成几乎相等的 n 个部分。
First you randomize the list and then you split it in n nearly equal parts.
打乱列表并不能保持顺序。你可以做这样的事情(很容易适应两个以上的部分)。完全未经测试。
Shuffling the list doesn't preserve order. You could do something like this instead (pretty easy to adapt to more than two parts). Completely untested.
随机分区也保留顺序:(
也就是说,我们对索引进行洗牌,然后在分区内对它们进行排序)
示例:
The random partition that also preserves the order:
(that is we shuffle the indices then sort them within the partitions)
example: