For brevity, let r, c = guess_row, guess_col.
c are both integers (barring input errors). They act collectively as the the indices of the two dimension list that represents the board.
C 0 1 2 3 4
0 O O O O O
1 O O O O O
2 O O O O O
3 O O O O O
4 O O O O O
Recall that each row is itself a list (now lain on its side) which rows we refer to as columns.
board[r] => [ 'O', 'O', 'O', 'O', 'O' ]
To access a point in the grid (element in the list), we need both indices.
The ship coordinates are safely generated by the program, so we know they will be integers. The user inputs may be suspect, though, so are cast to integer so errant input will raise an exception. Given valid inputs, the guess will or will not match that of the ship.
It's important to have a feel for the semantics in a lot of programming terminology, and the expectations and assertions that follow it. In particular, the term, list may have varying implications in differing native languages. It is fairly safe to assume that a list would be viewed the way W3C defines it, having distinct lines stacked vertically with bullets, alpha-numerics or symbols prefacing each.
By this definition, a list is a stack of items. It's also why
<li></li> is natively a block level element of character height and character width (meaning it expands with increase in content, restrained only in width by parent width).
This is the long and short of why I wrote, lain on its side. It's the only way we can envision it as a list of columns.