["O"] times 5?


maybe a stupid question but i dont get this:

if i write this code:
table = []
for x in range(5):

the result is a list of 5 lists with a string “O” [[‘O’], [‘O’], [‘O’], [‘O’], [‘O’]]
but when i multiply it 5 times:
table.append([“O”] * 5) shouldnt i get my table list to have 25 [“O”] lists and not 5 lists of [‘O’, ‘O’, ‘O’, ‘O’, ‘O’]??

def board_size(x):
	for i in range(x):
		board.append(["O"] * x)

The for loop is what is creating each row, the append * (x) is what is creating the columns, its just creating a list and extending it.

Each append is a list.

Think of it as a faster way of doing the following

board = []    
for i in range(6): # create a list with nested lists
    for n in range(6):
        board[i].append("O") # fills nested lists with data

Feel free to play around with other board sizes in the IDE on CA or do some testing over @ https://repl.it


I get the code and what id does. What i don’t get is why does the * not multyply the whole list but just the “O” inside it. When I see the [“O”] * 5, I expect to get [[“O”][“O”][“O”][“O”][“O”]], not [[‘O’, ‘O’, ‘O’, ‘O’, ‘O’]]


['O'] * 5 gives ['O', 'O', 'O', 'O', 'O']

given we multiple a 1d list, the result should also be a 1d list. We can’t just change the dimension of the list by doing a multiplication.

1d = 1 dimensional list.


When you multiply a number you don’t get more numbers, you get a bigger one


This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.