Reputation:
I want to change the value of i
in the loop to high
once x = True
but I don't know why every time the loop starts again, value of i
changes to i++
not to high+1
here's the code :
def max_min(self, data, high, low):
list1 = []
list2 = []
x = False
c = 0
for i in range(c, len(data)):
print(f"i = {i}")
if i == low:
if high > low:
list1.append(data[i])
list2 = data[low + 1:high]
x = True #once this condition is true
print(f"list2 = {list2}")
else:
list2 = data[low + 1:]
print(f"list2 = {list2}")
else:
list1.append(data[i])
print(f"list1 = {list1}")
if x == True:
c = high
return list1, list2
FOR MORE CLARITY : HERE'S the output with every iteration, Assume high = 6,for i in range(7)
:
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
whereas ideally it should be
i = 0
i = 1
i = 2
i = 3
# x = True, high = 6
i = 6 #high = 6
Upvotes: 0
Views: 289
Reputation: 881243
I would offer three suggestions:
i
rather than c
to high
.for in
will revert it to the next item in sequence regardless of what you do with the loop control variable :-)That last point you will see in action if you attempt to run:
for i in range(10):
print(i)
i = 9999
It will print 0..9
despite the changes to i
inside the loop. If you want a loop which will allow your changes to hold, for in
is not what you're looking for. Try a while
loop instead, something like:
i = 0
while i < len(data):
# Weave your magic here, including changing i to
# whatever you want.
i += 1
# Carry on ...
Upvotes: 1
Reputation: 1308
for i in range(7):
is i in [0,1,2,3,4,5,6]
fixed. No matter how many times you change the i value within the loop,in the next iteration it'll follow the sequence [0,1,2,3,4,5,6]
.
Also, your if x == True:
seems to be outside of for-loop by indentation.
Try while-loop
i = c
while i<len(data):
....
if x == True:
i = high
else:
i += 1
Upvotes: 0
Reputation: 2058
For you to be able to actively influence the loop, you need a while
loop. If you manually set i
at some point in the for
loop, it will be automatically reset at the beginning of the next iteration to the next value in line. E.g.:
for i in range(10):
if i == 3:
i = 100
print(i)
In a while
loop however, you can change the iterating variable / condition:
i = 0
while i < 10:
i += 1
if i == 3:
i = 100
print(i)
Translated to your case, I guess this is what you end up with:
def max_min(data, high, low):
list1 = []
list2 = []
x = False
i = 0
while i < len(data):
print(f"i = {i}")
if i == low:
if high > low:
list1.append(data[i])
list2 = data[low + 1:high]
x = True # once this condition is true
print(f"list2 = {list2}")
else:
list2 = data[low + 1:]
print(f"list2 = {list2}")
else:
list1.append(data[i])
print(f"list1 = {list1}")
if x is True:
i = high
x = False
else:
i += 1
return list1, list2
max_min([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 6, 3)
Upvotes: 0