当前位置: 首页 > 面试题库 >

清单上的Python append()与+运算符,为什么它们给出不同的结果?

百里智勇
2023-03-14
问题内容

为什么这两个操作(append()分别+)给出不同的结果?

>>> c = [1, 2, 3]
>>> c
[1, 2, 3]
>>> c += c
>>> c
[1, 2, 3, 1, 2, 3]
>>> c = [1, 2, 3]
>>> c.append(c)
>>> c
[1, 2, 3, [...]]
>>>

在最后一种情况下,实际上存在无限递归。c[-1]c一样。为什么与+操作不同?


问题答案:

解释“为什么”:

+操作将数组元素添加到原始数组。该array.append操作将数组(或任何对象)插入原始数组的末尾,从而导致对该点的
self引用 (因此无限递归)。

此处的区别在于,通过连接元素来添加数组时,+操作的作用是特定的(与其他数组一样重载,请参见本章的序列)。但是,append-
method确实按照您的要求进行操作:将对象附加在您赋予它的右侧(数组或任何其他对象),而不是获取其元素。

替代

使用extend(),如果你想使用的作用类似于+运算符的功能(如其他人在这里显示为好)。相反,这样做是不明智的:尝试使用+运算符模仿列表的追加(有关原因,请参阅我之前的链接)。

小历史

有趣的是,有一段历史:1993年2月Python中的数组模块的诞生。这也许会让您感到惊讶,但是在序列和列表出现之后才添加了数组。



 类似资料:
  • 问题内容: 我尝试将matlab代码转换为numpy,并发现numpy与std函数的结果不同。 在matlab中 在numpy中 这正常吗?我应该如何处理呢? 问题答案: NumPy函数采用一个可选参数:“自由度增量”。默认情况下是。对其进行设置以获取MATLAB结果: 要添加更多上下文,在计算方差(标准偏差为平方根)时,通常将其除以我们拥有的值的数量。 但是,如果我们从较大的分布中选择元素的随机

  • 下面是我的gulpfile。我正在尝试从scss生成缩小的css,然后使用gulp-rev重命名它。运行gulp Clean:资产然后gulp scss,然后gulp css工作完美。但运行gulp build并不能完成这项任务。缩小的css存储在./assets/css中,但重命名的css没有存储在./public/assets中

  • 这是一个优化问题,我正试图用我使用的opl代码来解决(稍微有点扭曲)。 opl代码为我提供了两种解决方案,即:{Product12,Product31} 当我使用docplex将此代码翻译为python语言时,我使用以下代码: 我明白了: ***问题没有解决方案 我不明白为什么我有不同的结果,有人能帮我吗? 先谢谢你。 当做

  • 为什么运算符只应该是4个字节却生成12个字节?当我引用变量时,这只是引用数组第一个索引的内存地址。实际上,我打印了第一个索引的内存地址,并将其与进行了比较,它们产生了相同的内存地址结果,这证实了它们都引用了数组的第一个索引,但是“array”产生了12个字节,而产生了4个字节。

  • 问题内容: 这是一个有关使用haversine公式计算地球上两个纬度和经度之间的距离的问题,用于需要“查找我最近的”功能的项目中。 haversine公式很好地讨论并在MySQL解决了这个帖子。 然后,我问了一个有关将其转换为存储函数的问题,这样它就可以在以后的项目中使用,而不必查找,记住或重新键入长格式的公式。 都很好。除了我的函数的结果(略有不同)以外,其他条件相同时,直接在查询中直接键入公式