在3d列表中查找最里面列表的子列表

问题描述 投票:2回答:2

我有一个列表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
2个回答
1
投票

你可以使用嵌套列表理解,当然这不仅仅是使用切片,但希望仍然有用:

>>> 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]]]

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]]]
© www.soinside.com 2019 - 2024. All rights reserved.