Python如何保留嵌套列表中每个子列表的最后一个元素
原代码错误说明
你的代码存在两个本质问题,完全偏离了需求逻辑:
list.remove()是原地修改列表的方法,没有返回值(返回值固定为None)。你在列表推导的判断条件中调用这个方法,会在遍历原列表的过程中直接改动原列表的结构,直接把原列表的最后一个子列表删掉了,这就是你看到输出少了最后一个子列表的直接原因。- 你的判断逻辑是筛选「不等于
None的子列表」,从头到尾没有对子列表内部的元素做任何截取操作,根本不可能实现「只保留子列表最后一个元素」的需求。
正确实现方案
要得到你预期的输出,直接在遍历子列表时截取最后一个元素、包装为单元素列表即可,写法非常简洁:
lst = [['Hello', 'World'], ['Hello', 'E', 'Planet'], ['Planet', 'World', 'Earth']] lst_new = [[item[-1]] for item in lst] print(lst_new) # 运行结果:[['World'], ['Planet'], ['Earth']]
如果你不需要保留原列表,想要直接在原嵌套列表上修改,可以用切片删除的方式处理每个子列表:
for sub in lst: # 删除子列表中除最后一个元素外的所有内容 del sub[:-1] print(lst) # 运行结果:[['World'], ['Planet'], ['Earth']]
补充说明:如果你的嵌套列表中可能存在空的子列表,上述写法会触发索引错误,可以在推导式中加过滤条件:
[[item[-1]] for item in lst if item],自动跳过空的子列表。
内容的提问来源于stack exchange,提问作者ducttape101
相关产品推荐
相关产品推荐

