如何对已切片的列表进行切片?
我有一个列表,比如说 [[1,2,3,4], [1,2,3,4], [1,2,3,4], [1,2,3,4]]
,这个列表叫做 somelist
。我想用 somelist[:2][:2]
来得到 [[1,2], [1,2]]
。也就是说,我想先切割这个列表,然后再对切割后的列表再切割一次,最后返回这个结果。请问在Python里,这样一行代码能实现吗?
3 个回答
0
你的列表总是包含16个元素,组成一个4x4的矩阵吗?如果你只是想获取右下角的4个元素,可以试试下面的代码:
>>> l = [[1,2,3,4], [1,2,3,4], [1,2,3,4], [1,2,3,4]]
>>> print [l[2][:2], l[3][:2]]
[[1, 2], [1, 2]]
不过,如果你想要一个更通用的解决方案,其他人提到的列表推导式会更好。
比较一下这两种方法的速度,看看哪种在你的情况下更快,这样做很有意思。不过我觉得这听起来像是过早的优化。
1
使用 numpy 进行多维切片非常简单:
import numpy
a = numpy.array([[1,2,3,4], [1,2,3,4], [1,2,3,4], [1,2,3,4]])
print(a[:2,:2])
8
你可以使用列表推导式来实现这个功能。我把你的示例输入做了一些修改,这样可以更清楚地看到选择了哪些内容:
>>> l = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
>>> print [x[:2] for x in l[:2]]
[[1, 2], [5, 6]]