go for range循环取值问题

for range循环取值

下面这段代码输出什么,说明原因:

func main() {

     slice := []int{0,1,2,3}
     m := make(map[int]*int)

     for key,val := range slice {
         m[key] = &val
     }

    for k,v := range m {
        fmt.Println(k,"->",*v)
    }
}
0->3
1->3
2->3
3->3

ps:
这是新手常会犯的错误写法,for range循环的时候会创建每个元素的副本,而不是元素的引用,所以m[key] = &val取的都是变量的地址,所以最后map中的所有元素的值都是变量val的地址,因为最后val被赋值为3,所有输出都是3

正确写法:

func main() {

     slice := []int{0,1,2,3}
     m := make(map[int]*int)

     for key,val := range slice {
     	tmpVal := val
         m[key] = &tmpVal
     }

    for k,v := range m {
        fmt.Println(k,"->",*v)
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python中的for循环可以使用range函数来实现间隔取值range函数的语法如下: range(start, stop[, step]) 其中,start表示起始值(默认为),stop表示终止值(不包含在范围内),step表示步长(默认为1)。 例如,要从1到10之间以2为步长取值,可以使用以下代码: for i in range(1, 10, 2): print(i) 输出结果为: 1 3 5 7 9 这样就可以实现间隔取值的功能了。 ### 回答2: Python中的for循环可以使用步长(间隔)来控制迭代的取值方式。在for循环中,我们可以使用range()函数来生成一个指定范围内的整数序列,然后使用步长参数来控制这个序列的间隔。 语法格式为:range(start, stop, step),其中start表示起始值,stop表示终止值(不包括在序列内),step表示步长,默认值为1。 例如,如果我们需要迭代从1到10的所有偶数,可以使用以下代码: ``` for i in range(2, 11, 2): print(i) ``` 输出结果为: ``` 2 4 6 8 10 ``` 在这个例子中,我们使用了range(2, 11, 2)函数生成了从2到10的所有偶数序列,并且使用步长参数2控制了迭代时的间隔,每次迭代跳过了一个奇数。 除了range()函数,我们也可以使用自定义集合等方式来实现for循环间隔取值,例如: ``` numbers = [1, 3, 5, 7, 9] for i in range(0, len(numbers), 2): print(numbers[i]) ``` 输出结果为: ``` 1 5 9 ``` 在这个例子中,我们使用了一个自定义的集合numbers,并且使用range(0, len(numbers), 2)函数生成了从0到len(numbers)的所有偶数序列,并且使用步长参数2控制了迭代时的间隔,每次迭代跳过了一个元素。 总之,Python中的for循环提供了丰富的间隔取值方式,可以帮助我们灵活控制迭代取值的方式和顺序。 ### 回答3: Python for循环间隔取值是指在for循环内部,设定一个步长来控制每次循环所取数值的间隔大小。使用间隔取值可以有效地简化代码、提高运算效率。 Python中有两种方式可以实现for循环间隔取值: 1.使用range()函数 range()函数可以生成一个指定范围内的数字序列,其基本语法为: range(start, stop[, step]) 其中,start为起始位置,stop为终止位置(不包括),step为步长。若省略start,则默认为0;若省略step,则默认为1。 例如,若要在1-10之间以2为步长进行循环遍历,可以使用如下代码: for i in range(1, 10, 2): print(i) 执行结果为: 1 3 5 7 9 2.使用切片操作 除了使用range()函数外,还可以使用列表(或元组、字符串等)的切片操作来实现for循环间隔取值。例如,若要在列表lst中每隔2个元素就输出一次,可以使用如下代码: lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] for i in lst[::2]: print(i) 其中,lst[::2]中的步长为2,表示每隔2个元素就输出一次。执行结果为: 0 2 4 6 8 综上所述,Python中使用for循环间隔取值可以使用range()函数或切片操作,具体选择哪种方式主要取决于所操作的数据类型以及具体需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值