冒号和逗号在python列表中的含义是什么?

and*_*geo 37 python numpy

我在python脚本中遇到了这个,list[:, 1]我试图弄清楚逗号的作用.

mgi*_*son 29

一般来说:

foo[somestuff]
Run Code Online (Sandbox Code Playgroud)

叫或__getitem__,或__setitem__.(有也是__getslice____setslice__,但这些都是现在已经过时,所以我们不要谈论这个).现在,如果somestuff有一个逗号,python将传递tuple给底层函数:

foo[1,2]  # passes a tuple
Run Code Online (Sandbox Code Playgroud)

如果有:,python将传递一个切片:

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)
Run Code Online (Sandbox Code Playgroud)

希望你明白了.现在如果有逗号和冒号,python将传递一个包含切片的元组.在你的例子中:

foo[:, 1]  # passes the tuple `(slice(None, None, None), 1)`
Run Code Online (Sandbox Code Playgroud)

object(foo)对输入的作用完全取决于对象.


qar*_*tal 16

让我们假设list是一个2D(numpy)数组,如下所示:

[[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]
Run Code Online (Sandbox Code Playgroud)

为进一步的例子.


小智 6

从某种意义上说,逗号分隔了您尝试从中选择的数组的不同维度。

假设我有一个二维数组

my_array = numpy.array([[1,2,3],
                        [4,5,6],
                        [7,8,9]])
Run Code Online (Sandbox Code Playgroud)

我可以通过这样做选择行(0 和 1)和列(1 和 2):

#             rows | cols
print(my_array[0:2, 1:3]) # prints [[2 3]
                                    [5 6]]
Run Code Online (Sandbox Code Playgroud)