Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列表的Python切片_Python_List_Slice - Fatal编程技术网

列表的Python切片

列表的Python切片,python,list,slice,Python,List,Slice,假设我有一个列表 >>> s = [ [1,2], [3,4], [5,6] ] 我可以访问第二个列表中的项目: >>> s[1][0] 3 >>> s[1][1] 4 整个第二份清单如下: >>> s[1][:] [3, 4] 但是为什么下面的第二个列表也会给我呢 >>> s[:][1] [3, 4] 我想这会给我三个列表中的

假设我有一个列表

    >>> s = [ [1,2], [3,4], [5,6] ]
我可以访问第二个列表中的项目:

    >>> s[1][0]
    3
    >>> s[1][1]
    4
整个第二份清单如下:

    >>> s[1][:]
    [3, 4]
但是为什么下面的第二个列表也会给我呢

    >>> s[:][1]
    [3, 4]
我想这会给我三个列表中的第二项


人们可以使用列表理解来实现这一点(如中),但我很好奇如何正确理解
s[:][1]
s[:][1]
意味着从
s
中取一个浅显的副本,然后给我第一个元素。。。而
s[1][:]
的意思是给我一份
s[1]
的浅拷贝

>>> s = [ [1,2], [3,4], [5,6] ]
>>> s[1]
[3, 4]
>>> s[:][1]
[3, 4]
您可能会混淆您所看到的利用
numpy
进行扩展切片的东西,例如:

>>> a = np.array([ [1,2], [3,4], [5,6] ])
>>> a[:,1]
array([2, 4, 6])
正如您所说,使用普通列表可以使用列表comp完成以下操作:

second_elements = [el[1] for el in s]

s[:][1]
意味着获取一份
s
的浅显副本,然后给我其中的第一个元素。。。而
s[1][:]
的意思是给我一份
s[1]
的浅拷贝

您可能会混淆您所看到的利用
numpy
进行扩展切片的东西,例如:

>>> a = np.array([ [1,2], [3,4], [5,6] ])
>>> a[:,1]
array([2, 4, 6])
正如您所说,使用普通列表可以使用列表comp完成以下操作:

second_elements = [el[1] for el in s]

s[:]
复制了
s
,因此下面的
[1]
访问该副本的第二个元素。这与
s[1]
相同

>>> s = [ [1,2], [3,4], [5,6] ]
>>> s[1]
[3, 4]
>>> s[:][1]
[3, 4]

s[:]
复制了
s
,因此下面的
[1]
访问该副本的第二个元素。这与
s[1]
相同

>>> s = [ [1,2], [3,4], [5,6] ]
>>> s[1]
[3, 4]
>>> s[:][1]
[3, 4]

s[:]
返回列表的副本。下一个
[…]
应用于上一个表达式返回的任何内容,并且
[1]
仍然是该列表的第二个元素

如果您想拥有每一项,请使用列表:

[n[1] for n in s]
演示:


s[:]
返回列表的副本。下一个
[…]
应用于上一个表达式返回的任何内容,并且
[1]
仍然是该列表的第二个元素

如果您想拥有每一项,请使用列表:

[n[1] for n in s]
演示:


如果我们分解命令,则行为很容易理解:

s[:]
将返回整个列表:

[[1, 2], [3, 4], [5, 6]]

现在选择[1]将给出第二个列表(python索引从零开始)。

如果我们分解命令,可以很容易地理解该行为:

s[:]
将返回整个列表:

[[1, 2], [3, 4], [5, 6]]

现在,选择[1]将给出第二个列表(python索引从零开始)。

s[1][:]
表示
s
中第二个项目的一部分,即
[3,4]


s[:][1]
是指
s
的浅拷贝中的第二项,也是
[3,4]

下面是一个演示:

>>> s = [ [1,2], [3,4], [5,6] ]
>>> # Shallow copy of `s`
>>> s[:]
[[1, 2], [3, 4], [5, 6]]
>>> # Second item in that copy
>>> s[:][1]
[3, 4]
>>> # Second item in `s`
>>> s[1]
[3, 4]
>>> # Shallow copy of that item
>>> s[1][:]
[3, 4]
>>>

另外,
[1]
返回第二项,而不是第一项,因为Python索引从
0
s[1][:]
表示
s
中第二项的a,即
[3,4]


s[:][1]
是指
s
的浅拷贝中的第二项,也是
[3,4]

下面是一个演示:

>>> s = [ [1,2], [3,4], [5,6] ]
>>> # Shallow copy of `s`
>>> s[:]
[[1, 2], [3, 4], [5, 6]]
>>> # Second item in that copy
>>> s[:][1]
[3, 4]
>>> # Second item in `s`
>>> s[1]
[3, 4]
>>> # Shallow copy of that item
>>> s[1][:]
[3, 4]
>>>

另外,
[1]
返回第二项,而不是第一项,因为Python索引从
0

开始,如果需要这种行为,可以使用numpy数组,尽管语法略有不同:
a=np.array(s);打印一个[:,1]
-->
[2 4 6]
如果需要这种行为,请使用numpy数组,尽管语法略有不同:
a=np.array(s);打印[:,1]
-->
[2 4 6]