Python中按元素合并嵌套列表,实现指定结构转换求助
解决Python嵌套列表按元素合并的问题
嘿,我来帮你搞定这个嵌套列表合并的问题!你想要的是把多个子列表按对应位置的元素重新组合,这在Python里其实有非常简洁的解法,咱们一步步来拆解~
最直接的解法:用zip()+列表推导
这是最符合你需求的写法,一行代码就能搞定:
lst = [['a','b','c'], [1,2,3], ['x','y','z'], [4,5,6]] res = [list(item) for item in zip(*lst)] print(res) # 输出结果正好是你要的:[['a', 1, 'x', 4], ['b', 2, 'y', 5], ['c', 3, 'z', 6]]
为什么这样能行?
*lst是Python的解包语法,它会把原来的嵌套列表拆成4个独立的子列表,相当于把['a','b','c'], [1,2,3], ['x','y','z'], [4,5,6]作为单独参数传给zip()zip()函数的作用就是把多个可迭代对象中相同索引位置的元素打包成元组,比如第一个元组是('a',1,'x',4),第二个是('b',2,'y',5),以此类推- 最后用列表推导把每个元组转成列表,就得到了你想要的嵌套列表结构
用map()实现的替代写法
你之前试过map()但没成功,其实搭配zip(*lst)就能用:
res = list(map(list, zip(*lst)))
这里map(list, zip(*lst))会把zip()返回的每个元组都转换成列表,最后再用list()把整个map对象转成列表,效果和上面的列表推导完全一样。
说说你之前可能踩的坑
- 列表推导如果没用到
zip(*lst),可能只是做了普通的元素拼接(比如把所有子列表的元素放到一个大列表里),而不是按位置组合 concatenate是numpy库的函数,它是按指定轴拼接数组,不是按位置元素合并,所以不适合这个纯列表的场景
刚开始接触Python的嵌套列表操作很容易搞混,多试试zip()的用法,你会发现它在处理这类对应位置元素的问题上超级好用!
内容的提问来源于stack exchange,提问作者Andri Már Stefánsson
相关产品推荐
相关产品推荐

