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.
CodePudding user response:
Lets take it step by step.
test = ['x' for i in range(9)]
.test
here is a list that contains 9'x'
s[test[i*3: (i 1)*3] for i in range(3)]
. Lets call this list a temp_list. This list comprehension takes a slice oftest
list. Fori
equals to 0, the slice will betest[0: 3]
which is equals to['x', 'x', 'x']
. Fori
equals to 1, the slice will betest[3: 6]
but contains same values as before.Now
for row in ...
. This will loop over what we designated temp_list for better denoting. So this loop will iterate 3 times androw
every time will be['x', 'x', 'x']
. So theprint(..)
will be repeated 3 timesprint('1 ' ' 2 '.join(row) ' 3')
. Thestr.join()
actually concatenates every element of an iterable (here a list calledrow
) withstr
(here ' 2 ') acting as a separator between them. So,' 2 'join(row)
here will produce outputx 2 x 2 x
and finally theprint()
will print1 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
CodePudding user response:
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?