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)].testhere 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 oftestlist. Foriequals to 0, the slice will betest[0: 3]which is equals to['x', 'x', 'x']. Foriequals 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 androwevery 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 xand 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?
