首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么每次‘for’迭代都会输出4次

每次使用for循环进行迭代时,输出4次的原因是循环的条件或迭代次数设置不正确。在大多数编程语言中,for循环通常由三个部分组成:初始化、条件和迭代器。

初始化部分用于设置循环的起始条件,条件部分用于判断是否继续循环,迭代器部分用于更新循环变量的值。如果其中任何一个部分设置不正确,都可能导致循环的迭代次数不符合预期。

例如,如果for循环的条件部分设置为一个恒为真的条件,如i < 4,那么循环将一直执行,直到i的值超过4。这将导致循环迭代4次,输出4次。

另外,如果在循环体内部对循环变量进行了修改,可能会导致循环次数增加或减少。例如,在每次迭代中将i的值增加1,那么循环将执行4次,输出4次。

总结起来,每次for循环迭代输出4次的原因可能是循环条件设置不正确或循环体内部对循环变量进行了修改。为了确保循环次数符合预期,需要仔细检查循环的条件和迭代器的设置。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

dotnet 为什么每个项目都会输出一个 NuGet 包而不是一个包带所有项目

为什么不是我最终只打出一个 NuGet 包,这个 NuGet 包,包含了所有的项目的输出文件?每个项目独立输出是为了解决什么问题?...NuGet 包,这个 NuGet 包需要包含 A 和 B 的两个项目,因为咱一开始就将 A.dll 和 B.dll 放在相同的一个 NuGet 包里面 此时其他开发者就纳闷了,我就想要更新 B.dll 为什么你也将...这就有趣了,我在最终项目里面安装了 A 的 NuGet 和 C 的 NuGet 包,请问最终输出的 B.dll 是新版本还是旧版本?...现在有多个 NuGet 包,我是不是要做很多次安装 其实也不是的,因为 NuGet 包有引用依赖的功能,只需要安装最顶层的 NuGet 包就可以了,其他被最顶层依赖的 NuGet 包都会自动安装 多个...而 D 和 E 的依赖分别是 D 引用 A 而 E 引用 C 项目,同时 A 和 C 都引用 B 项目,只是引用的版本不相同 通过引用依赖,可以让 A 和 B 和 C 都会自动安装,如果遇到有相同的依赖

86930

为什么 Go for-range 的 value 值地址每次都一样?

原文链接: 为什么 Go for-range 的 value 值地址每次都一样?...但是在使用 for-range 循环迭代数组和切片的时候,是很容易出错的,甚至很多老司机一不小心都会在这里翻车。具体是怎么翻的呢?我们接着看。...:$ go run main.go3 3 3上述代码并没有输出 1 2 3,而是输出 3 3 3。...对于数组、切片或字符串,每次迭代,for-range 语句都会将原始值的副本传递给迭代变量,而非原始值本身。口说无凭,具体是不是这样,还得靠源码说话。...在循环过程中,会将迭代元素赋值给一个临时变量,这又发生了拷贝。如果取地址的话,每次都是一样的,都是临时变量的地址。以上就是本文的全部内容,如果觉得还不错的话欢迎点赞,转发和关注,感谢支持。

33040

Go语言中常见100问题-#63 Not being careful with goroutines and loop ...

但是,实际的输出结果并不是确定性的包含1、2和3个数字,比如有时候打印233,有时候打印333. 这是为什么呢?...3 3 3 现在来看看打印233时可能的执行情况: 随着时间的流逝,i的值从1到2到3,在每次迭代中,都会启动一个新的goroutine,由于无法保证每个goroutine何时启动和完成,因此打印的结果也会有所不同...i := range s { val := i go func() { fmt.Println(val) }() } 为什么上面这段代码工作是正常的...因为在每次迭代中,我们都会创建一个新的局部变量val, 此变量会在创建goroutine之前被赋值为i的当前值,当每个闭包goroutine在执行println语句时,会使用预期值执行,所以会输出123...) }(i) } 上述程序仍然采用匿名执行goroutine方式(而不是go f(i)), 但是没有采用闭包方式,内部打印的val不是函数外部的变量,而是函数的入参,通过这样处理,在每次迭代中保证

31620

Flutter 小技巧之 Dart 里的 List 和 Iterable 你真的搞懂了吗?

,因为通过 List 返回一个 Iterable 的操作(如 map \ where)的都是 Lazy 的,也就是它们只会在每次迭代”时才会被调用。...其中除了 isEmpty 之外,其他的三个操作都会重新触发 map 方法的执行,那究竟是为什么呢?...Lazy: 21 Eager: 7 这样的结果:因为 lazyCounter 每次调用 length 都是直接操作 Iterable 这个对象 ,所以每次都会重新执行一次 where ,所以...确实在这种复杂嵌套的时候, Iterable 会把逻辑变得很难维护,而官方也表示:由于 Iterable 可能被多次迭代,因此不建议在迭代器中使用 side-effects 。...其实还是不少, 例如:分页,可以确保只有适合用户屏幕渲染时,才执行对应逻辑去加载数据数据库查询,可以实现使用数据时执行的懒加载效果,并且每次都重新迭代数据请求举个例子,如下代码所示,感受下 naturalsFunc

94550

dropout理解「建议收藏」

过度训练 2.dropout dropout是指在训练一个很大的神经网络时,它在每次迭代的过程中随机“关闭”一些神经元,被关闭的神经元在前向和反向传播中都不贡献作用,英文即是“dropout”的意思。...不参与本次训练是说在当前的batch中,不参与训练,每个batch都会随机挑选神经元做dropout。...dropout为什么可以防止过拟合 dropout的解决方案,在每一次迭代的过程中,我们会随机dropout掉一些神经元(至于在那一层做dropout,需要看不同的情况),如果设置的dropout的值为...我们多次迭代优化,每次迭代优化都会做这样的”随机采样“,从原来的网络中构造一个子网络(sub-network),而每次构造的网络也都不尽相同,这样每个神经元对另一个特定神经元的激活很不敏感。...所以,在测试的是时候使用的整个神经网络,我们只需要将每一层的权值矩阵乘以p%就可以保证测试网络的输出期望和训练网络的输出期望值大小一致了。

75510

为什么遍历 Go map 是无序的?

有的小伙伴没留意过 Go map 输出顺序,以为它是稳定的有序的;有的小伙伴知道是无序的,但却不知道为什么?有的却理解错误?...,是非固定顺序输出的,也就是每次都不一样(标题也讲了)。...用于决定从哪里开始循环迭代。更具体的话就是根据随机数,选择一个桶位置作为起始点进行遍历迭代 因此每次重新 for range map,你见到的结果都是不一样的。那是因为它的起始位置根本就不固定!...因此没有具体展开) 总结 在本文开始,咱们先提出核心讨论点:“为什么 Go map 遍历输出是不固定顺序?”。而通过这一番分析,原因也很简单明了。...除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

7.7K41

日常开发中常遇到的一些问题和思考

二、使用增强for循环删除元素,猜猜下面代码会输出什么?...("淘宝".equals(item)) { list.remove(item); } } System.out.println(list); 为什么使用迭代器循环方式在循环的时候删除元素会抛出这个异常呢...实际上,迭代器在每次调用next()方法的时候,第一步就会先去执行checkForComodification()方法,这个方法的目的就是检查list下的modCount是否 和expectedModCount...了解完解决方案,我们再来深入研究下抛出异常的目的是为什么呢?...叫做“快速失败”,因为集合的remove操作都是非原子性的,在多线程情况下,可能出现一个线程在遍历的时候另外一个线程执行了删除操作,当集合的元素被删除后,集合的容量就会变小,在被删除的元素后面的元素坐标都会往前移动一位

17010

Python中的 生成器、迭代

参考链接: Python中的生成器Generator 迭代的概念  上一次输出的结果为下一次输入的初始值,重复的过程称为迭代,每次重复即一次迭代,并且每次迭代的结果是下一次迭代的初始值  什么是迭代 ...list是可迭代对象,dict是可迭代对象,set也是可迭代对象。  迭代器 Iterator  1.为什么要有迭代器? 对于没有索引的数据类型,必须提供一种不依赖索引的迭代方式。 ...yield的功能:  相当于为函数封装好iter和nextreturn只能返回一次值,函数就终止了,而yield能返回多次值,每次返回都会将函数暂停,下一次next会从上一次暂停的位置继续执行保存当前运行状态...生成器是一个函数,而且函数的参数都会保留。 ...为什么说生成器是一种迭代器?

1.2K20

JavaScript 为什么要进行变量提升,它导致了什么问题?

前端小菜鸡一枚,分享的文章纯属个人见解,若有不正确或可待讨论点可随意评论,与各位同学一起学习~ JavaScript 为什么要进行变量提升,它导致了什么问题?...• 无论是函数还是变量在那个位置上声明,都会被提升到函数之前,可保证变量声明前可访问而不会报错 • 变量提升的本质:js 引擎在代码执行前有一个解析的过程,会创建一个执行上下文,初始化一些代码执行所需要的参数...执行阶段:按照代码顺序执行 为什么要进行变量提升? 1....3, 第二个输出 0 1 2。...*/ /** * 在 for 循环中,let 声明的变量会存在一个块级作用域的概念,使用 let 声明的迭代变量时, * js 引擎会在后台为每一个迭代循环声明一个新的迭代变量,因此每次使用的 i

13010

ES6生成器

通过调用生成器对象的next()方法,可以迭代执行生成器函数的代码,每次调用都会将控制权交给生成器函数的下一个yield语句。...在每次调用生成器对象的next()方法时,生成器函数都会执行,直到遇到一个yield语句。yield语句的值将作为next()方法的返回值,并将生成器函数的执行暂停在该位置。...然后,我们创建了一个生成器对象generator,并使用next()方法逐步迭代生成器。每次调用next()方法时,生成器函数将执行到下一个yield语句,并返回该值。...通过使用yield语句在每次迭代中产生新的斐波那契数,我们可以使用生成器对象fibonacci来生成数列的值。...orange'在上面的示例中,我们定义了一个生成器函数arrayIterator(),它接受一个数组作为参数,并使用yield语句在每次迭代中生成数组的元素。

22620

初始化神经网络权重的方法总结

那我为什么在这里提到它呢?要理解权值初始化的需要,我们需要理解为什么将权值初始化为零是无效的。 让我们考虑一个类似于上面所示的简单网络。每个输入只是一个标量X₁,X₂X₃。...这意味着如果我们的权值矩阵被初始化为过大或过小的值,所有有用的信息都会在sigmoid函数中丢失。 如果我们使用ReLu非线性,这就不那么重要了,但是在将权重初始化为大值或小值时还有其他问题。...Z是一个层计算的输出,也称为激活。我们希望Z的均值是0,标准差是1。(从技术上讲,Z是ReLu等非线性激活后的结果) 为什么均值为0,标准差为1这么重要? 考虑一个有100层的深度神经网络。...使用第一个微型批处理在网络中进行迭代,并在每次迭代比例时权重以使输出方差接近1。重复直到输出方差为1或发生最大迭代。...论文中,作者提出比例因子为√Var(BL),其中BL —它的输出Blob 作者还提出了最大迭代次数的值,以防止无限循环。但是,在他们的实验中,他们发现在1–5次迭代中实现了单位方差。

1K30

从零开始深度学习(十一):浅层神经网络

所以,每次梯度下降都会循环,并且计算以下的值,也就是网络的输出: 前向传播(forward propagation) 方程如下(之前讲过): (1) (2) (3) (4) 反向传播(back...为什么会这样呢?...你可能觉得这也没啥啊,大惊小怪的,但是如果这样初始化这整个神经网络的话,那么这两个隐含单元就完全一样了,因此它们两个完全对称,也就意味着计算同样的函数,并且肯定的是最终经过每次训练的迭代,这两个隐含单元仍然是同一个函数...由此可以推导,由于隐含单元计算的是同一个函数,所有的隐含单元对输出单元有同样的影响。一次迭代后,同样的表达式结果仍然是相同的,即 隐含单元仍是对称的。...但如果做二分类并且输出单元是 Sigmoid 函数,那么你一定不会想让你的初始参数太大,因此这就是为什么乘上 0.01 或者其他一些小数是合理的尝试,对 也是一样。

54610

GBDT梯度提升树

为什么使用回归树?...GDBT使用的树是CART回归树,尽管GDBT既可以用来作分类也可以作为回归,但是,该算法中使用的树都是回归树,因为GDBT每次拟合的都是梯度值,是有意义的连续值,比如一个人的岁数可以使10+5-3=12...回归树的每个节点都会生成一个预测值,该节点的预测值等于这个节点所有年龄的平均值,分支时一般使用最小化均方差即: min((每个人的年龄-预测值)*(每个人的年龄-预测值)/N) 这里怎么理解呢?...(1)选择最优切分变量j与切分点s,求解: image.png 遍历变量j扫描切分点s,选择使得公式1最小的对(j,s) (2)用选定的(j,s)对划分区域并决定相应的输出值 image.png (...,每一次的迭代的误差都会减小。

1.6K60

ArrayList的删除姿势你都掌握了吗

System.out.println(Thread.currentThread().getStackTrace()[1].getMethodName()+":"+list.toString()); } 下面我们来分析下为什么这些方法为什么有的可以正确删除元素...()方法删除(deleteByArrayList)这两种姿势都会抛出java.util.ConcurrentModificationException他们本质都是迭代器循环,每次循环都会checkForComodification...modCount都会进行加1操作,expectedModCount值不变还是原来的。...数组删除元素后每次都需要移动。第一次删除(i=0)后b的下标就为0了,然后第二次(i=1)进行删除的时候是不是就成功的把b给遗漏了。...使用迭代器的remove()方法删除(推荐做法) 迭代器循环,使用迭代器的remove()方法删除(deleteByIterator)这个比较简单我们直接看迭代器的删除 关键代码就一行 expectedModCount

52130
领券