Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python for increment inner loop

How to increment the outer iterator from the inner loop?

To be more precise:

  for i in range(0,6):
    print i
    for j in range(0,5):
      i = i+2

I am getting

0
1
2
3
4
5

, but I want 0,2,4

Above is the simpilfied idea what I want to acheive.

Here is my Java code:

str1="ababa"
str2="aba"
for(int i =0; i < str1.length; i++)
  for(int j =0; j < str2.length; j++)
       if str1[i+j]!=str[j]
           break;
       if( j ==str2.length -1)
           i=i+str2.length;
like image 323
runcode Avatar asked Nov 16 '12 04:11

runcode


People also ask

Can we increment inside for loop?

A for loop doesn't increment anything. Your code used in the for statement does.

Is there a ++ in Python?

Since the binary + operator is the addition operator, a++ will be treated as a , + , and + . But Python expects a number after the first + operator. Therefore, it will give a syntax error on a++ , since the second + is not a number.


1 Answers

It seems that you want to use step parameter of range function. From documentation:

range(start, stop[, step]) This is a versatile function to create lists containing arithmetic progressions. It is most often used in for loops. The arguments must be plain integers. If the step argument is omitted, it defaults to 1. If the start argument is omitted, it defaults to 0. The full form returns a list of plain integers [start, start + step, start + 2 * step, ...]. If step is positive, the last element is the largest start + i * step less than stop; if step is negative, the last element is the smallest start + i * step greater than stop. step must not be zero (or else ValueError is raised). Example:

 >>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 >>> range(1, 11) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
 >>> range(0, 30, 5) [0, 5, 10, 15, 20, 25]
 >>> range(0, 10, 3) [0, 3, 6, 9]
 >>> range(0, -10, -1) [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
 >>> range(0) []
 >>> range(1, 0) []

In your case to get [0,2,4] you can use:

range(0,6,2)

OR in your case when is a var:

idx = None
for i in range(len(str1)):
    if idx and i < idx:
        continue
    for j in range(len(str2)):
        if str1[i+j] != str2[j]:
            break
    else:
        idx = i+j
like image 100
Artsiom Rudzenka Avatar answered Oct 24 '22 16:10

Artsiom Rudzenka