Python列表推导式生成幂次元组时列表+号拼接规则咨询
问题解答
疑问1:为什么[i] + [i**j for j in range(6)]不会生成嵌套结构
Python 中列表的+运算符原生定义就是两个列表的拼接操作,会将左右两个列表的所有元素按顺序合并为一个新的一维列表:
- 左侧的
[i]是长度为1的一维列表,仅包含单个元素i - 右侧的列表推导式生成的是长度为6的一维列表
两者相加后得到的就是长度为7的一维列表,自然不会出现嵌套结构。如果要生成你提到的[[0], [1, 0, 0, 0, 0]]这类嵌套结构,需要使用append()方法将整个列表作为元素添加,和+的拼接逻辑完全不同。
疑问2:列表+运算符和list.extend()功能是否一致
两者效果有相似性,但本质完全不同:
+运算符会生成并返回一个全新的列表,原有的两个列表不会被修改,要求运算符左右两侧都必须是列表类型。list.extend(可迭代对象)是原地修改调用方法的列表,会直接把传入可迭代对象的元素追加到列表末尾,不会生成新列表,方法本身返回None,且参数支持任意可迭代对象(元组、生成器、集合等都可以)。
示例代码对比:
# + 运算符示例 a = [1] b = [2,3] c = a + b print(a) # 输出:[1],原列表未改动 print(c) # 输出:[1,2,3],返回新列表 # extend 方法示例 a = [1] b = [2,3] res = a.extend(b) print(a) # 输出:[1,2,3],原列表被修改 print(res) # 输出:None,无返回值
内容的提问来源于stack exchange,提问作者simmons2714
相关产品推荐
相关产品推荐

