Python中如何按对应位置扩展list of lists?
解决两个列表的列表按位置扩展的问题
你的代码无效主要有两个原因:
- 循环变量
x是list1里的子列表(比如[1,2,3]),不是索引,用子列表作为list1的索引会触发类型错误 - 你写的是生成器表达式,没有执行实际的
extend操作;就算改成列表推导式,也只会生成一堆None(因为extend方法返回None)
下面给两种可行的解决方案:
方案一:修改原列表(原地扩展)
如果允许修改原list1,可以通过索引循环逐个扩展子列表:
list1 = [[1,2,3],[4,5,6],[7,8,9]] list2 = [['a','b','c'],['d','e','f'],['g','h','i']] # 遍历每个索引,扩展对应位置的子列表 for idx in range(len(list1)): list1[idx].extend(list2[idx]) print(list1) # 输出:[[1,2,3,'a','b','c'],[4,5,6,'d','e','f'],[7,8,9,'g','h','i']]
注意:这个方法要求list1和list2的长度相同,否则会出现索引越界错误。
方案二:生成新列表(不修改原列表)
如果不想改动原列表,用列表推导式结合zip函数配对对应子列表,直接相加生成新列表:
list1 = [[1,2,3],[4,5,6],[7,8,9]] list2 = [['a','b','c'],['d','e','f'],['g','h','i']] output = [sub_list1 + sub_list2 for sub_list1, sub_list2 in zip(list1, list2)] print(output) # 输出:[[1,2,3,'a','b','c'],[4,5,6,'d','e','f'],[7,8,9,'g','h','i']]
zip(list1, list2)会把两个列表中位置对应的子列表配对成元组(比如([1,2,3], ['a','b','c'])),然后我们把每对的子列表相加,就得到了合并后的新子列表。
内容的提问来源于stack exchange,提问作者jm_24
相关产品推荐
相关产品推荐

