【发布时间】:2018-03-03 17:17:11
【问题描述】:
我有一个列表l=[[[1,2,3],[4,5,6]],[[7,8,9],[9,1,2]]]
如何仅使用切片获得列表[[[1,2],[4,5]],[[7,8],[9,1]]]?我尝试了l[:][:][:2],但它给了我整个 3d 列表。
【问题讨论】:
标签: python python-2.7
我有一个列表l=[[[1,2,3],[4,5,6]],[[7,8,9],[9,1,2]]]
如何仅使用切片获得列表[[[1,2],[4,5]],[[7,8],[9,1]]]?我尝试了l[:][:][:2],但它给了我整个 3d 列表。
【问题讨论】:
标签: python python-2.7
您可以使用嵌套列表推导,当然这不仅使用切片,而且希望仍然有用:
>>> lst = [[[1,2,3],[4,5,6]],[[7,8,9],[9,1,2]]]
>>> [[subsub[:-1] for subsub in sublist] for sublist in lst]
[[[1, 2], [4, 5]], [[7, 8], [9, 1]]]
【讨论】:
更新:刚刚注意到您的外部列表不需要切片。在这种情况下:
由于您使用的是 Python2,map 在这个上运行良好:
>>> from operator import itemgetter
>>> ft = itemgetter(slice(2))
>>>
>>> map(map, (ft, ft), l)
[[[1, 2], [4, 5]], [[7, 8], [9, 1]]]
下面的解决方案错误地假设输入列表是3 x 3 x 3 并被分割为2 x 2 x 2。我会把它留在这里,以防有人在寻找那个案例。
>>> from operator import itemgetter
>>> ft = itemgetter(slice(2))
>>>
>>> map(map, (ft, ft), map(ft, l[:2]))
[[[1, 2], [4, 5]], [[7, 8], [9, 1]]]
【讨论】: