我需要对列表列表进行切片:
A = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
idx = slice(0,4)
B = A[:][idx]
上面的代码没有给我正确的输出。
我想要的是:
[[1,2,3],[1,2,3],[1,2,3]]
很少使用切片对象比使用列表理解更容易阅读,这不是其中之一。
>>> A = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
>>> [sublist[:3] for sublist in A]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
这非常清楚。对于
A
中的每个子列表,给我前三个元素的列表。
使用 numpy 非常简单 - 你只需执行切片即可:
In [1]: import numpy as np
In [2]: A = np.array([[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]])
In [3]: A[:,:3]
Out[3]:
array([[1, 2, 3],
[1, 2, 3],
[1, 2, 3]])
当然,您可以将
numpy.array
转换回 list
:
In [4]: A[:,:3].tolist()
Out[4]: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
A = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
print [a[:3] for a in A]
使用列表理解
您可以使用列表理解,例如:
[x[0:i] for x in A]
其中 i
是 1,2,3 等,具体取决于您需要的元素数量。
要么:
>>> [a[slice(0,3)] for a in A]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
或者:
>>> [list(filter(lambda x: x<=3, a)) for a in A]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
这是我的代码:
A = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
print(A[0][0:3],A[1][0:3],A[1][0:3])