Python中的for循环与C++有何不同

How is for loop in Python different from C++?

本文关键字:C++ 何不同 循环 中的 for Python      更新时间:2023-10-16
for i in range(5):
if (i==2):
i =i -1
print(i)

我得到了0,1,1,3,4(一个有限的结果(当我使用C++时

#include<iostream>
using namespace std;
int main(){
for (int i=0;i<10;i++){
if(i==2){
i = i-1;
}
cout<<(i)<<endl;
}
}

我得到了无穷大的输出,Python代码在达到值2后也应该输出无穷大。不明白为什么我得到了不同的结果?

在Python中,您可以创建range(5),即一组0, 1, 2, 3, 4。当你对它进行迭代时,它正是这样做的——第一个循环取i=0,迭代完成后取下一个元素i=1,依此类推。在循环内更改i的值不会更改下一个项目。

然而,在C/C++中,您可以直接对i变量进行操作。您并没有创建一组预定义的值。您可以根据需要对其进行修改。

你可以实现";Python风格">用于C++中的循环,使用范围用于循环:

for (int i: { 0, 1, 2, 3, 4 } ) {
if(i==2) {
i = i-1;
}
std::cout<< i << std::endl;
}

C++中python for循环的等价物如下:

#include<iostream>
using namespace std;
int main(){
int foo[5] = {0, 1, 2, 3, 4};
int i;
for (i=0; i<5; i++){
int val = foo[i];
if(val == 2){
val = val - 1;
}
cout<<(val)<<endl;
}
}

哪个收益率:

0
1
1
3
4

range()函数为您提供了一个迭代器,类似于上面的foo(在函数中(,i从迭代器中获取值&用于for循环的主体中。如果在正文中重新分配i,则在下一次循环运行时,该更改就会丢失,因为i是在循环开始时重新分配的。因此,与C++不同,更改循环中使用的变量不会修改循环的状态。

在python中

你只会得到一个";"复制";,您可以在不更改循环计数器的情况下按自己喜欢的方式进行更改。

在C++中

你改变循环计数器本身,这会导致无休止的循环

注意

如果你想测试它,只需在for循环的开头放一个print语句print('--', i),你就可以清楚地了解发生了什么。

在c++中,您正在递增循环开始时存储在i中的值。

在python中,在开始时为i赋值,然后如果它等于2,则从中减去1。

与c++中的python代码等效的是

for(int i : {1, 2, 3, 4, 5})
{
if(i==2)
i = i-1;
std::cout<<i<<std::endl;
}

让我们分解循环,帮助您更好地理解为什么会发生这种情况。

首先,理解range(...)很重要。在python中,range(5)list(range(5))返回[0,1,2,3,4],这是一个listrange(...)总是返回一个列表,因此当您在python中使用for循环时,您实际上不是在增加实际值,而是在使用range(…(生成的值列表上循环,即使您修改了值,更改也是暂时的,因为一旦迭代结束,循环变量将被分配使用CCD_ 18 生成的列表中的下一个值

c++的情况并非如此。在c++中,循环的工作方式不同,只要循环变量(i(<10(在你的情况下(。没有生成列表或数组,您使用的是整数值,应用于i的任何更改都不会消失,因为在迭代结束时,i将变为i=i+1

这相当于您的python代码:

for i in [0, 1, 2, 3, 4]:
if (i==2):
i =i -1 # temporary assignment to i-1=2-1 = 1
# temporary because after the loop ends i would become the next value in the list i.e 3
print(i)