如何用切片方法提取嵌套列表中每个子项的第一个列表?
提取嵌套列表中每个子列表的第一个元素
嘿,这事儿其实挺简单的,我给你几种实用的方法来实现你想要的效果:
首先先明确你的原列表:
l = [[[0, 1, 1, 0, 0, 0, 2, 1, 2, 0, 1, 2], [0.0]], [[1, 1, 0, 2, 0, 0, 0, 1, 2, 1, 2, 2], [0.0]], [[0, 2, 2, 1, 2, 1, 0, 2, 2, 2, 1, 0], [0.0]], [[1, 1, 0, 1, 2, 2, 2, 2, 0, 0, 2, 2], [0.0]], [[1, 2, 2, 0, 0, 2, 1, 1, 1, 2, 1, 0], [0.0]], [[0, 2, 1, 2, 0, 1, 2, 1, 1, 2, 2, 2], [0.0]], [[0, 0, 2, 0, 0, 1, 1, 1, 1, 0, 0, 2], [0.0]], [[0, 2, 1, 2, 2, 0, 0, 0, 0, 0, 1, 2], [0.0]], [[1, 1, 1, 2, 1, 2, 2, 1, 0, 2, 0, 2], [0.0]], [[0, 1, 1, 0, 0, 0, 1, 2, 1, 0, 1, 0], [0.0]]]
方法1:列表推导式(最推荐,Pythonic写法)
这是Python里处理这类问题最简洁高效的方式,一行代码搞定:
l1 = [sublist[0] for sublist in l]
它的逻辑很直观:遍历原列表l中的每一个子列表sublist,提取每个子列表的第一个元素(索引为0的位置),然后把这些元素自动收集成新列表l1,完全符合你的期望结果。
方法2:使用map函数
如果你习惯函数式编程的风格,也可以用map结合匿名函数来实现:
l1 = list(map(lambda x: x[0], l))
map函数会把lambda x: x[0]这个匿名函数应用到l的每一个元素上,提取第一个元素,最后通过list()把结果转换成列表即可。
方法3:普通循环(适合新手理解)
如果想要更直观的步骤,用基础的循环+追加元素的方式也完全可行:
l1 = [] for sublist in l: l1.append(sublist[0])
这种写法一步步执行:先初始化一个空列表l1,然后遍历原列表的每个子列表,把每个子列表的第一个元素添加到l1里,逻辑清晰,容易上手。
以上三种方法最终得到的l1都是你想要的结果:
[[0, 1, 1, 0, 0, 0, 2, 1, 2, 0, 1, 2], [1, 1, 0, 2, 0, 0, 0, 1, 2, 1, 2, 2], [0, 2, 2, 1, 2, 1, 0, 2, 2, 2, 1, 0], [1, 1, 0, 1, 2, 2, 2, 2, 0, 0, 2, 2], [1, 2, 2, 0, 0, 2, 1, 1, 1, 2, 1, 0], [0, 2, 1, 2, 0, 1, 2, 1, 1, 2, 2, 2], [0, 0, 2, 0, 0, 1, 1, 1, 1, 0, 0, 2], [0, 2, 1, 2, 2, 0, 0, 0, 0, 0, 1, 2], [1, 1, 1, 2, 1, 2, 2, 1, 0, 2, 0, 2], [0, 1, 1, 0, 0, 0, 1, 2, 1, 0, 1, 0]]
内容的提问来源于stack exchange,提问作者K_ Douli
相关产品推荐
相关产品推荐

