Python列表合并疑问:extend赋值后B[0]变为None的原因
列表extend操作返回None的原因及无if条件的合并方案
为什么B[0]变成了None?
Python里的list.extend()是原地修改列表的方法——它会直接把传入的可迭代对象元素添加到原列表末尾,但这个方法的返回值是None,不会返回修改后的列表。
你执行B[0] = B[0].extend(B[1])时,本质是把extend()返回的None赋值给了B[0],自然就覆盖了原来的子列表。
无if条件的解决办法
方法1:直接用extend原地修改(不赋值)
既然extend是原地修改,直接调用即可,不需要赋值操作:
# 示例B B = [[1, 2], [3, 4], [5, 6]] # 依次合并子列表到B[0] B[0].extend(B[1]) B[0].extend(B[2]) # 最终合并后的列表就是B[0] print(B[0]) # 输出 [1, 2, 3, 4, 5, 6]
方法2:列表相加生成新列表
列表相加会返回一个全新的合并列表,语法更简洁:
B = [[1, 2], [3, 4], [5, 6]] merged_list = B[0] + B[1] + B[2] print(merged_list) # 输出 [1, 2, 3, 4, 5, 6]
方法3:循环合并(适合子列表数量不确定的情况)
如果要保留循环逻辑,直接对目标列表执行extend即可,不需要赋值:
B = [[1, 2], [3, 4], [5, 6]] merged_list = B[0].copy() # 复制第一个子列表,避免修改原B的结构 for sublist in B[1:]: merged_list.extend(sublist) print(merged_list) # 输出 [1, 2, 3, 4, 5, 6]
如果不需要保留原列表B,也可以直接用merged_list = B[0],再循环extend后续子列表。
内容的提问来源于stack exchange,提问作者Youssef Joe
相关产品推荐
相关产品推荐

