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

Python:while循环和for循环有哪些区别和不同?

邹时铭
2023-05-16

数据容器可以存储多个元素,那么,就会有需求从容器内依次取出元素进行操作。将容器内的元素依次取出进行处理的行为,称之为:遍历、迭代。

迭代、遍历可以使用诸如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循环理论上不可以,因为被遍历的容器容量不是无限的。

在使用场景上:

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 {