如何将包含两个字符串与一个子列表的列表扁平化一级?
解决嵌套列表的扁平化问题
嘿,我来帮你搞定这个列表扁平化的需求!你的每个子列表结构很固定——前两个是字符串,第三个是数值组成的子列表,所以我们完全可以针对这个固定结构来处理,比通用的扁平化方法更直接高效。
方法一:直接利用列表拼接(最简单)
你的需求里每个子元素的结构是[字符串1, 字符串2, [数值1, 数值2,...]],我们可以直接把前两个元素和第三个列表的内容拼接起来,用列表推导式就能轻松实现:
lists = [ ['A0A 4L0', 'ABBY', [38.065, 38.74, 61.987, 27.375, 105.675, 37.578]], ['A0A 0A7', 'JOHN', [38.196, 39.222, 60.804, 24.139, 99.158, 31.609]], ] result = [item[:2] + item[2] for item in lists] print(result)
运行这段代码就能得到你想要的结果:
[ ['A0A 4L0', 'ABBY', 38.065, 38.74, 61.987, 27.375, 105.675, 37.578], ['A0A 0A7', 'JOHN', 38.196, 39.222, 60.804, 24.139, 99.158, 31.609] ]
方法二:使用itertools.chain
如果你想用itertools.chain,其实只需要把前两个元素和第三个列表作为参数传给它,再转成列表就行。之前可能是没找对正确的调用方式:
import itertools lists = [ ['A0A 4L0', 'ABBY', [38.065, 38.74, 61.987, 27.375, 105.675, 37.578]], ['A0A 0A7', 'JOHN', [38.196, 39.222, 60.804, 24.139, 99.158, 31.609]], ] result = [list(itertools.chain(item[:2], item[2])) for item in lists] print(result)
这个方法也能得到完全一样的结果,适合如果之后结构有小变化的情况,但对于你现在的固定结构,第一种方法更直观。
为什么之前的尝试没成功?
你提到用列表推导式和itertools.chain没实现,大概率是用了通用的扁平化逻辑(比如递归处理所有嵌套),但你的结构是固定的三层嵌套里只有最后一个元素是列表,通用方法可能反而处理复杂了,或者没针对性地提取前两个元素再拼接数值列表。
内容的提问来源于stack exchange,提问作者KateMac
相关产品推荐
相关产品推荐

