I met this in a python script list[:, 1]
and I am trying to figure out the role of the comma.
A colon on the right side of an index means everything after the specified index.
Python uses the :: to separate the End, the Start, and the Step value.
Answer: The double colon is a special case in Python's extended slicing feature. The extended slicing notation string[start:stop:step] uses three arguments start , stop , and step to carve out a subsequence. It accesses every step -th element between indices start (included) and stop (excluded).
It's a common syntactical convention to allow trailing commas in an array, languages like C and Java allow it, and Python seems to have adopted this convention for its list data structure.
Generally speaking:
foo[somestuff]
calls either __getitem__
, or __setitem__
. (there's also __getslice__
and __setslice__
, but those are now deprecated, so let's not talk about that). Now, if somestuff
has a comma in it, python will pass a tuple
to the underlying function:
foo[1,2] # passes a tuple
If there is a :
, python will pass a slice:
foo[:] # passes `slice(None, None, None)` foo[1:2] # passes `slice(1, 2, None)` foo[1:2:3] # passes `slice(1, 2, 3) foo[1::3] # passes `slice(1, None, 3)
Hopefully you get the idea. Now if there is a comma and a colon, python will pass a tuple which contains a slice. in your example:
foo[:, 1] # passes the tuple `(slice(None, None, None), 1)`
What the object (foo
) does with the input is entirely up to the object.
Lets assume list
is a 2D (numpy) array as follows:
[[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9]]
list[1,1] # --> 5
It says select the element in position [1,1] (note that indexes start from zero)
list[:,1] # --> [2,5,8] list[1][1] # --> 5 list[:][1] # --> [4 5 6]
See this and this for further examples.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With