当前位置: 首页 > 面试题库 >

在Go中随机播放数组

吴宏扬
2023-03-14
问题内容

我试图将以下Python代码转换为Go

import random

list = [i for i in range(1, 25)]
random.shuffle(list)
print(list)

但是我发现Go版本冗长而笨拙,因为没有shuffle函数,我不得不实现接口和转换类型。

什么是我的代码的惯用Go版本?


问题答案:

由于列表只是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]
}


 类似资料:
  • 问题内容: 我有一个像这样的数组: 如何将其随机/随机播放? 问题答案: 实际无偏混洗算法是Fisher-Yates(aka Knuth)。

  • 问题内容: 我有以下DataFrame: 从csv文件读取DataFrame。所有具有1的行都位于最上面,然后是具有2的行,然后是具有3的行,依此类推。 我想重新整理DataFrame行的顺序,以便将所有行混合在一起。可能的结果可能是: 我该如何实现? 问题答案: 使用Pandas的惯用方式是使用数据框的方法对所有行进行采样而无需替换: 的关键字参数指定的行的分数到随机样品中返回,所以装置返回所有

  • Go的math/rand包提供了伪随机数的生成。 package main import "fmt" import "math/rand" func main() { // 例如`rand.Intn`返回一个整型随机数n,0<=n<100 fmt.Print(rand.Intn(100), ",") fmt.Print(rand.Intn(100)) fmt.Pri

  • 问题内容: 我如何寻找地图中的元素,我正在寻找与方法类似的东西。 问题答案: A的排序方式实际上不像,这意味着您无法按索引访问项目。因此,改组通常没有任何意义。但是您可以这样做(我在示例中省略了泛型):

  • 问题内容: 和之间有什么区别? 我已经阅读了文档页面,但是当我只想随机地对数组元素进行随机排列时,我不明白两者之间是否有任何区别。 确切地说,假设我有一个数组。 如果我想生成x的随机排列,那么和之间有什么区别? 问题答案: 与以下内容有两个区别: 如果传递了数组,它将返回该数组的改组后的 副本 ;将数组改组到位 如果传递一个整数,它将返回一个改组范围,即 如果x是整数,则随机置换np.arange

  • 问题内容: 我有以下代码从PHP 数组中选取元素: 给定一个大数组,但只有几个元素(例如out ),这相对较慢,因此我想对其进行优化,以使并非所有元素都必须改组。这些值必须是唯一的。 我正在寻找性能最好的替代产品。我们可以假设它没有重复项并且被索引了。 问题答案: 这将提供5个元素,而且没有重复项,而且很快。密钥将被保留。 注意:您必须确保$ array包含5个或更多的元素,或者添加某种检查以防止