-
尚方宝剑之说
要找到列表中的最小数字,您需要遍历列表并存储您当前找到的最小数字。将这个“迄今为止最小”的数字与列表中的其他数字进行比较,如果您发现一个较小的数字,请用它替换您的最小数字。在迭代结束时,您将知道列表中的最小数字。smallest := x[0] // set the smallest number to the first element of the listfor _, num := range x[1:] { // iterate over the rest of the list if num < smallest { // if num is smaller than the current smallest number smallest = num // set smallest to num }}fmt.Println(smallest)
-
阿晨1998
您提供的示例程序纯属巧合。如果正确的值 9 是切片中的第一个,则根本不会有输出。有多种方法可以达到识别最小int的目的(还有更多的方法):func smallestOfCopyWithSort(in []int) int { // Make a copy, so we do not have to modify the original slice. // Note: Do NOT use this approach, it is here only for completeness. copy := append([]int(nil), in...) sort.Ints(copy) return (copy[0])}func smallestWithSort(in []int) int { // Sort the slice. // Note that it will be modified and you // need to make sure that it will always // be sorted, even when you add new values. sort.Ints(in) return (in[0])}func smallestWithMattsApproach(in []int) int { smallest := in[0] // set the smallest number to the first element of the list for _, num := range in[1:] { // iterate over the rest of the list if num < smallest { // if num is smaller than the current smallest number smallest = num // set smallest to num } } return smallest}@Matt 的方法可能是最好的方法,因为它非常快,无需修改原始切片。这实际上取决于您想要实现的目标。这里有一些基准$ go test -test.benchmem -bench=. -test.cpu 1,2,4 -test.benchtime=10sgoos: darwingoarch: amd64pkg: <redacted>BenchmarkSortWithCopy 5000000 345 ns/op 160 B/op 2 allocs/opBenchmarkSortWithCopy-2 5000000 354 ns/op 160 B/op 2 allocs/opBenchmarkSortWithCopy-4 5000000 352 ns/op 160 B/op 2 allocs/opBenchmarkMattsApproach 100000000 15.1 ns/op 0 B/op 0 allocs/opBenchmarkMattsApproach-2 100000000 15.1 ns/op 0 B/op 0 allocs/opBenchmarkMattsApproach-4 100000000 15.2 ns/op 0 B/op 0 allocs/opBenchmarkSort 2000000000 0.00 ns/op 0 B/op 0 allocs/opBenchmarkSort-2 2000000000 0.00 ns/op 0 B/op 0 allocs/opBenchmarkSort-4 2000000000 0.00 ns/op 0 B/op 0 allocs/op毫不奇怪,smallestOfCopyWithSort如果多次调用,它比其他方法慢几个数量级。Matts 的方法非常快,不会复制或修改任何内容。但是,如果您需要多次访问最小数量的切片,则对切片进行排序(升序)并简单地访问第一个成员会更高效。这样做的原因是切片将被修改为排序顺序。但是,这种方法有一个警告:您要么在向切片添加值时非常小心,要么在每次修改它时都使用它,这可能会抵消性能优势,具体取决于您的读取和写入比率/从切片。就个人而言,我发现smallestWithSort我最常使用的解决方案,因为我正在使用的切片通常不会改变。结论如果您只需要访问最小的数字一次或者切片值的顺序很重要,请使用 Matt 的方法。如果顺序无关紧要并且您需要多次访问最小的数字,您可能应该使用smallestWithSort,同时牢记约束条件。
-
qq_笑_17
在for i, num := range x { if num < i { fmt.Println(num) } }这里,i代表索引,num代表价值。因此,您的if条件表示值小于索引然后打印该值。因为,9 值是 9,索引是 14。所以它打印 9,这不是你想要的。
-
富国沪深
返回python中列表的最小数量def find_smallest_number(input_list): d=[] for num in input_list: for i in numbers: if num<i: if d==[]: d.append(num) else: for j in d: if j>num: d.remove(j) d.append(num) return d