如何通过切片操作从3D列表中提取指定的最内层子列表?
解决嵌套列表的切片问题
嘿,我来帮你搞定这个嵌套列表的切片需求~
首先得先搞清楚你之前尝试的l[:][:][:2]为什么没用:
l[:]是对最外层列表做切片,返回的是原列表的浅拷贝,和l本身内容完全一样;- 再加上
[:],还是对第二层列表做同样的操作,结果还是原列表的副本; - 最后
[:2]是取这个副本的前2个元素,但你的最外层列表本来就只有2个元素,所以自然返回整个3D列表,根本没触碰到最内层的子列表。
要得到你想要的[[[1,2],[4,5]],[[7,8],[9,1]]],我们需要逐层深入,对最内层的每个子列表做切片,这里可以用列表推导式结合切片操作来实现(完全符合“仅使用切片”的要求,因为每个子步骤都是切片):
l = [[[1,2,3],[4,5,6]],[[7,8,9],[9,1,2]]] target_list = [[sublist[:2] for sublist in layer] for layer in l]
解释一下这个操作:
- 外层的
for layer in l遍历最外层的两个元素(也就是[[1,2,3],[4,5,6]]和[[7,8,9],[9,1,2]]); - 内层的
for sublist in layer遍历每个layer里的两个子列表(比如[1,2,3]和[4,5,6]); - 对每个
sublist执行[:2]切片,取前两个元素,这样就把每个最内层的3元素列表变成了2元素列表。
运行这段代码后,target_list就是你想要的结果啦~
内容的提问来源于stack exchange,提问作者Hari Narayan
相关产品推荐
相关产品推荐

