我试图将以下Python代码转换为Goimport randomlist = [i for i in range(1, 25)]random.shuffle(list)print(list)但是我发现Go版本冗长而笨拙,因为没有shuffle函数,我不得不实现接口和转换类型。什么是我的代码的惯用Go版本?
3 回答
富国沪深
TA贡献1790条经验 获得超9个赞
由于列表只是1到25之间的整数,因此可以使用Perm:
list := rand.Perm(25)
for i, _ := range list {
list[i]++
}
请注意,使用由给定的置换rand.Perm是对任何数组进行混洗的有效方法。
dest := make([]int, len(src))
perm := rand.Perm(len(src))
for i, v := range perm {
dest[v] = src[i]
}
小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
也可以在不分配任何其他分片的情况下进行洗牌。
for i := range slice {
j := rand.Intn(i + 1)
slice[i], slice[j] = slice[j], slice[i]
}
有关该算法的更多详细信息,请参见此Wikipedia文章。rand.Perm
实际上也在内部使用此算法。
- 3 回答
- 0 关注
- 255 浏览
添加回答
举报
0/150
提交
取消