假设A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
然后A[0][:]
打印[1, 2, 3]
但为什么A[:][0]
再次打印[1, 2, 3]
?
它应该打印专栏[1, 4, 7]
,不应该吗?
答案 0 :(得分:3)
[:]
相当于复制。
A[:][0]
是A副本的第一行。
A[0][:]
是A的第一行的副本。
两者是相同的。
获取第一列:[a[0] for a in A]
或者使用numpy和np.array(A)[:,0]
答案 1 :(得分:2)
如果您没有指定开始或结束索引,Python将返回整个数组:
A[:] = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
答案 2 :(得分:2)
[:]
匹配整个列表。
因此A[:]
与A
相同。因此A[0][:]
与A[0]
相同。
A[0][:]
与A[0]
相同。
答案 3 :(得分:2)
请注意,[:]
只会为您提供列表中所有内容的副本。所以你得到的是完全正常的。我想你想在 numpy 或Matlab中使用这个运算符。这在常规Python中不会这样做。
A[0]
是[1, 2, 3]
因此A[0][:]
也是[1, 2, 3]
A[:]
是[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
因此A[:][0]
为[1, 2, 3]
如果您想要第一列,请尝试:
[e[0] for e in A]
# [1, 4, 7]
答案 4 :(得分:2)
A[:]
返回整个列表的副本。这是A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
A[:][0]
因此选择[1, 2, 3]
。
如果您想要第一列,请执行循环:
col = []
for row in A:
col.append(row[0])
答案 5 :(得分:2)
A不是2-D列表:它是列表列表。考虑到这一点:
A[0]
是A:
>>> A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> A[0]
[1, 2, 3]
因此,A[0][:]
:是第一个列表中的每个元素:
>>> A[0][:]
[1, 2, 3]
A[:]
是A的每个元素,换句话说,它是A的副本:
>>> A[:]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
因此,A[:][0]
是A副本的第一个元素。
>>> A[:][0]
[1, 2, 3]
要获得你想要的东西,请使用numpy:
>>> import numpy as np
>>> A = np.array( [[1, 2, 3], [4, 5, 6], [7, 8, 9]] )
A
现在是一个真正的二维数组。我们可以获得A
的第一行:
>>> A[0,:]
array([1, 2, 3])
我们可以类似地获得A
的第一列:
>>> A[:,0]
array([1, 4, 7])
`
答案 6 :(得分:2)
A实际上是列表列表,而不是矩阵。使用A[:][0]
您正在访问列表A的完整切片的第一个元素(列表[1,2,3]
)。[:]
是Python切片表示法(在the relevant Stack Overflow question中解释)。
要获得[1,4,7],您必须使用[sublist[0] for sublist in A]
之类的东西,这是列表理解,这是Python语言的重要元素。