列表的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]