我熟悉切片,我无法绕过这个,我尝试改变一些值来试图说明发生了什么,但是这对我没用。
无论如何,这是一个例子:
l = [[0, 0, 0], [0, 1, 0], [1, 0, 0], [1, 1, 1]]
print l[:,0:2]
导致:
[[0, 0], [0, 1] [1, 0], [1, 1]]
我试图将其翻译为"从索引0切片到0,2,递增2"这对我没有意义。
答案 0 :(得分:14)
您所做的基本上是多轴切片。因为l
是二维列表,并且您希望切片第二维,所以使用逗号来指示下一个维。
, 0:2
选择第二维的前两个元素。
有一个非常好的解释here。我记得当我第一次了解它时,它会澄清一切。
答案 1 :(得分:1)
仅当'l'是一个numpy数组时才对我有效。 对于“ l”作为常规列表,会引发错误(Python 3.6):
>>> l
[[0, 0, 0], [0, 1, 0], [1, 0, 0], [1, 1, 1]]
>>> print (l[:,0:2])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers or slices, not tuple
>>> l=np.array(l)
>>> l
array([[0, 0, 0],
[0, 1, 0],
[1, 0, 0],
[1, 1, 1]])
>>> print (l[:,0:2])
[[0 0]
[0 1]
[1 0]
[1 1]]
>>>
答案 2 :(得分:0)
以下内容适用于普通列表。假设它是一个列表列表, 并且所有子列表的长度都相同,那么您可以执行此操作(python 2)
A = [[1, 2], [3, 4], [5, 6]]
print (f"A = {A}")
flatA = sum(A, []) # Flattens the 2D list
print (f"flatA = {flatA}")
len0 = len(A[0])
lenall = len(flatA)
B = [flatA[i:lenall:len0] for i in range(len0)]
print (f"B = {B}")
输出将是:
A = [[1, 2], [3, 4], [5, 6]]
flatA = [1, 2, 3, 4, 5, 6]
B = [[1, 3, 5], [2, 4, 6]]