如何从多维Python列表中获取每个子列表的指定元素?无需循环实现
问题解答
给定列表 lst = [ ['a', 1], ['b', 2] ],要提取出 [1, 2],你试过的 lst[0:2][1] 之所以不行,是因为 lst[0:2] 取的是原列表的前两个元素(也就是整个原列表),再索引 [1] 只会拿到第二个子列表 ['b', 2],自然得不到目标结果。
不用任何显式循环的话,有几种方法可以实现:
用
map配合匿名函数:list(map(lambda x: x[1], lst))map会把每个子列表传入lambda函数,取出索引为1的元素,最后转成列表即可。用
zip解包:list(zip(*lst))[1]*lst会把原列表的子列表作为单独参数传给zip,zip会将每个子列表的对应位置元素打包成元组,得到('a', 'b'), (1, 2),取第二个元组转成列表就是目标结果。用
operator.itemgetter:
先导入模块,再通过itemgetter指定要提取的索引:from operator import itemgetter list(map(itemgetter(1), lst))这个和第一种方法原理类似,只是用内置的
itemgetter替代了匿名函数,效率会稍高一点。
内容的提问来源于stack exchange,提问作者just in
相关产品推荐
相关产品推荐

