0

Can some one explain how this loop works?

test = ['x' for i in range(9)]
for row in [test[i*3: (i+1)*3] for i in range(3)]:
    print('1 ' + ' 2 '.join(row) + ' 3')

I thought the output would be:

1  2 x 3
1  2 x 3
1  2 x 3

I can't follow how it inserts 'x' between 1 and 2.

2 Answers 2

1

Lets take it step by step.

  1. test = ['x' for i in range(9)]. test here is a list that contains 9 'x's

  2. [test[i*3: (i+1)*3] for i in range(3)]. Lets call this list a temp_list. This list comprehension takes a slice of test list. For i equals to 0, the slice will be test[0: 3] which is equals to ['x', 'x', 'x']. For i equals to 1, the slice will be test[3: 6] but contains same values as before.

  3. Now for row in .... This will loop over what we designated temp_list for better denoting. So this loop will iterate 3 times and row every time will be ['x', 'x', 'x']. So the print(..) will be repeated 3 times

  4. print('1 ' + ' 2 '.join(row) + ' 3'). The str.join() actually concatenates every element of an iterable (here a list called row) with str (here ' 2 ') acting as a separator between them. So, ' 2 'join(row) here will produce output x 2 x 2 x and finally the print() will print 1 x 2 x 2 x 3.

So the final output will be -

1 x 2 x 2 x 3
1 x 2 x 2 x 3
1 x 2 x 2 x 3
Sign up to request clarification or add additional context in comments.

Comments

1

Well, printing the first line you will see nine x in a list, so we are generating a list

test = ['x' for i in range(9)]
print(test)

Output:

['x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x']

Next: you could simply write it with two loops where in the first one you loop up to 3 times. And let's print again to understand.

for i in range(3):
  print(test[i*3: (i+1)*3])

Output:

['x', 'x', 'x']

['x', 'x', 'x']

['x', 'x', 'x']

As you can see from this output we got three rows each having three numbers of x.

Then, it is possible to loop and print something different like this:

for i in range(3):
  for row in [test[i*3: (i+1)*3]]:
    print('1 ' + ' 2 '.join(row) + ' 3')

Output:

1 x 2 x 2 x 3

1 x 2 x 2 x 3

1 x 2 x 2 x 3

I hope that it does make sense now! Please let me know if you want a specific explanation for anything else?

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.