Would this code increment i by 1 or not?
for i in range[100]:
print[i]
i*=2
asked May 11, 2020 at 19:23
5
It will increment by 1
. When you use an iterator like range[]
, you assign the next value from the iterator each time, and whatever you assigned to i
in the loop is ignored.
If you want it to double each time, don't use range[]
, do your own updating and end test.
i = 1
while [i < 100]:
print[i]
i *= 2
answered May 11, 2020 at 19:35
BarmarBarmar
694k53 gold badges468 silver badges576 bronze badges
i
will start from the first value of the
sequence generated by iterator [range[]
in this case] and then it will get multiplied by 2
and it'll retain this value until the next iteration of loop at which it will get the next value of the sequence generated by iterator range[]
so,
for i in range[5]:
print["Before update"]
print[i]
i*=2
print["After update"]
print[i]
Output:
Before Update
0
After Update
0
Before Update
1
After Update
2
Before Update
2
After Update
4
Before Update
3
After Update
6
Before Update
4
After Update
8
Before Update
5
After Update
10
answered May 11, 2020 at 19:33
user_3pijuser_3pij
1,2729 silver badges21 bronze badges
2
0 points
about 7 years
my_list = [0,1,2,3,6,5,7]
for i in range[0,len[my_list],2**i]: print my_list[i]
this code gives an error
Answer 55e1c6b5d3292fba3e0000c2
The code is fine apart from the for loop line. Read that line again. for i in range[0, len[my_list], 2**i]
means to take the next value from the range and
then assign it to i
. So first, Python has to generate the range. This means that i
can only be assigned a value when the range has been generated. This is how things will go in your case:
- Python sees the for loop
- Python tries to generate a range [it doesn’t know what
i
is yet] - It notices that you have passed
i
to the range[] method, it doesn’t know whati
is so it generates a NameError [which basically means that it doesn’t know whati
is a name of]
This is how they should have gone:
- Python sees the for loop
- It tries to generate a range. Generation is successful.
- It assigns the first value of the range to
i
As you can see, in your case, i
has not been created yet and you are already trying to pass it in as an argument to the range[]
function. If you tell me what you are trying to do then I could fix your code.
points
about 7 years
Answer 55e28f289113cb1cd400054d
points
about 7 years
Answer 55e3b13b937676a569000576
Try the following:
import math l = list[range[0,100]] for i in range[0, int[math.log[len[l],2]]+1]: print l[2**i - 1]
Note that the last line is indented but does not show in the preview.
points
about 7 years
View Discussion
Improve Article
Save Article
View Discussion
Improve Article
Save Article
For loops, in general, are used for sequential
traversal. It falls under the category of definite iteration. Definite iterations mean the number of repetitions is specified explicitly in advance. But have you ever wondered, what happens, if you try to increment the value of the iterator from inside the for loop. Let’s see with the help of the below example.
Example:
Python3
lis
=
[
1
,
2
,
3
,
4
,
5
]
for
i
in
range
[
len
[lis]]:
print
[lis[i]]
i
+
=
2
Output:
1 2 3 4 5
The above example shows this odd behavior of the for loop because the for loop in Python is not a convention C style for loop, i.e., for
[i=0; i=
len
[lis]]:
break
print
[lis[i], end
=
" "
]
i
+
=
2
- Output:
1 3 5
- Using Range Function: We can use the range function as the third parameter of this function specifies the step.
Note: For more information, refer to Python range[] Function.
Example:
Python3
lis
=
[
1
,
2
,
3
,
4
,
5
]
for
i
in
range
[
0
,
len
[lis],
2
]:
print
[lis[i], end
=
" "
]
- Output:
1 3 5