数据容器可以存储多个元素,那么,就会有需求从容器内依次取出元素进行操作。将容器内的元素依次取出进行处理的行为,称之为:遍历、迭代。
迭代、遍历可以使用诸如for、while这样的循环,那我们有什么区别呢?以下是我的理解:
理解一:
1、while适合用于状态变化控制,说高大上点就是while适合做状态机,而for仅仅是为了循环而循环
2、另外一个区别,for循环一般都是这么用的,for(int i=xx;i<xx;i++);重点是关于循环控制变量i是在for中声明的(不是说不可以声明在for外面,只是一般都是这么用),这样的话,在for循环结束后,i会被释放,可以优化内存空间,如果你在8051单片机上写过程序,你的内存只有2k-8k,你会格外珍惜内存的使用;而相对来说,while循环跳出后控制变量不会被释放,还可以继续使用
3、和一有点类似,通常刚学程序的时候会告诉你应尽量避免死循环,但是慢慢你会发现会有很多
while(1){。。。。};比如说侦听,我们需要一个死循环来不断进行侦听,然后发现有接入就开辟一个新的线程去处理(类比FTP机制)。
理解二:
一个需求:使用for循环和while循环都可以去实现,那么到底两者之间有什么区别?
从内存角度考虑:
局部变量在栈内存中存在,当for循环语句结束,那么变量会及时被gc(垃圾回收器)及时的释放掉,不浪费空间
如果使用循环之后还想去访问循环语句中控制那个变量,使用while循环
从应用场景角度考虑:
如果一个需求明确循环的次数,那么使用for循环(开发中使用for循环的几率大于while循环)
如果一个需求,不知道循环了多少次,使用while循环
下面我们看看案例:
遍历列表中的元素可以使用while循环,取出列表中的元素可以使用列表[下标]的方式,定义一个变量表示下标,从0开始循环条件为 下标值 列表的元素数量,示例如下:
index = 0 while index<len(列表): 元素=列表[index] T 对元素进行处理 index += 1
除了while循环外,Python中还有另外一种循环形式:for循环。对比while,for循环更加适合对列表等数据容器进行遍历。
for循环临时变量in数据容器对临时变量进行处理,从容器内,依次取出元素并赋值到临时变量上。在每一次的循环中,我们可以对临时变量(元素)进行处理。代码如下:
my_list = [1,2,3,4,5] for i in my_list: print(i)
每一次循环将列表中的元素取出,赋值到变量i,供操作,输出结果如下:
while循环和for循环,都是循环语句,但细节不同:
在循环控制上:
while循环可以自定循环条件,并自行控制,for循环不可以自定循环条件,只可以一个个从容器内取出数据。
在无限循环上:
while循环可以通过条件控制做到无限循环,for循环理论上不可以,因为被遍历的容器容量不是无限的。
在使用场景上:
while循环适用于任何想要循环的场景,for循环适用于,遍历数据容器的场景或简单的固定次数循环场景。
我们经常需要重复执行一些操作。 例如,我们需要将列表中的商品逐个输出,或者运行相同的代码将数字 1 到 10 逐个输出。 循环 是一种重复运行同一代码的方法。 “while” 循环 while 循环的语法如下: while (condition) { // 代码 // 所谓的“循环体” } 当 condition 为真时,执行循环体的 code。 例如,以下将循环输出当 i < 3 时的
问题内容: 我正在使用React.js创建一个地牢爬虫游戏,并且正在使用Array.fill(0)来初始化棋盘。但是当我在2d数组内设置元素时,它将整个Array(列)设置为,而不是单个元素。我有另一个功能,注释掉,可以正常工作。那么,为什么会发生这种情况?如何正确使用Array.fill? 这是我的董事会组件: 问题答案: 您可以通过Array.fill的方式填充2D数组:
我试图在任意年份的经济衰退中计算复利。以下promise函数计算可变投资组合的发展。 编辑的清晰度: const是一个从1到20循环一年的数组(是静态的) 三元()在每次运行的不同年份触发,导致不同年份的
主要内容:while语句的实现,for语句Erlang是一个函数式编程语言,是需要记住所有函数的编程语言,它们不提供任何的循环结构。而函数式编程取决于一个概念叫做递归。 while语句的实现 由于在 Erlang 中没有可直接使用的 while 语句,就必须使用递归技术在 Erlang 中来实现 while 语句。 我们将努力遵循 while 循环的实现,如在其他编程语言中一样。以下是遵守一个流程: 让我们来看看如何使用递归来在 Erla
Iterator(遍历器)的概念 JavaScript原有的表示“集合”的数据结构,主要是数组(Array)和对象(Object),ES6又添加了Map和Set。这样就有了四种数据集合,用户还可以组合使用它们,定义自己的数据结构,比如数组的成员是Map,Map的成员是对象。这样就需要一种统一的接口机制,来处理所有不同的数据结构。 遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同
问题内容: 我今天发现了一件奇怪的事情,想知道是否有人可以阐明其中的区别? 运行完每个循环后,没有改变,但是在每个元素中添加了一个。我实际上使用该版本在循环内写入初始化的NumPy数组。 问题答案: 不同之处在于,一个修改数据结构本身(就地操作),而另一个仅 重新分配 变量。 仅出于完整性考虑: 是 不是总是 做就地操作,有(至少)三种例外情况: 如果 没有实现 的则方法的声明仅仅是一个速记。如果
我试图在for循环中获得for循环,因此输出如下: 我希望输出显示一个正方形 我不知道它为什么不这样做。下面是我的代码:
for in 结构可以通过一个计数器来迭代。创建计算器的一个最简便的方法就是使用区间标记 a..b。这 会生成从 a(包含此值) 到 b (不含此值)增幅为 1 的一系列值。 让我们使用 for 代替 while 来写 FizzBuzz 程序。 fn main() { // `n` 将从 1, 2, ..., 100 这些值依次获取进行每次循环 for n in 1..101 {