Python 为n倍生成拆分索引的步骤

Python 为n倍生成拆分索引的步骤,python,python-2.7,Python,Python 2.7,我需要生成一个用于交叉验证的拆分,比如s是记录的索引 s = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20] 现在,我想随机洗牌并将数据拆分为5倍,通常我想要这样的输出 s = [[1 5 4 6], [2,3, 19,20], [... ], [... ], [.. ]] 注意:在每个数组中,数字应该是唯一的,不应该重复 我知道我可以使用chunk(),但在chunk中,只能按顺序执行,如1-4、5-8等 有人能帮我吗?使用ran

我需要生成一个用于交叉验证的拆分,比如s是记录的索引

s = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]
现在,我想随机洗牌并将数据拆分为5倍,通常我想要这样的输出

s = [[1 5 4 6], [2,3, 19,20], [... ], [... ], [.. ]] 
注意:在每个数组中,数字应该是唯一的,不应该重复

我知道我可以使用chunk(),但在chunk中,只能按顺序执行,如1-4、5-8等


有人能帮我吗?

使用
random.Shuffle
将你的数组洗牌,并将其分成5块:

对于
Python2
使用

import random

s = range(1, 21)
random.shuffle(s)
s = [s[i::5] for i in range(5)]
或者对于
Python3

随机导入
s=列表(范围(1,21))
随机。洗牌(s)
s=[s[i::5]表示范围(5)内的i]

您是否有针对您的需求已经试用过的代码?您能指出哪些方面给您带来了困难,和/或您可能收到的任何错误消息吗?我尝试了所有这些,但没有任何满足我的要求的数据可以在不同的数据块之间重复?这不满足相关要求:
在每个数组中,数字应该是唯一的,它不应该重复。
@EugeneSoldatov是的,它是后来添加的……也要求相同的操作…+1到您的漂亮整洁的解决方案这不是分成4块吗?对于xrange(5)中的i,最后一行应该是
s=[s[i::5]
No它不是。它将列表拆分为5个部分
len(s)/5
是一次折叠中的元素数(如果总共20个,则为4个)。而
[i::5]
每五个元素读取一次,而不是每四个元素读取一次。因此,代码是正确的。@wuerfelfreak以下是代码(尽管是在Python 3中),这是预期的。它可以翻译成Python 2,对吗@本杰明旺:我道歉!你当然是对的。它应该是
范围(5)
。我现在觉得自己很愚蠢。谢谢你教育我。。。
import random
s = [1 ,2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
print [random.sample(s,5) for i in xrange(len(s)/5)]