Python 中的 x = [m]*n 语法是什么?

问题描述 投票:0回答:2

我偶然发现了

x = [m]*n
并在解释器中运行它,我可以看到代码分配了一个用 m 初始化的 n 元素数组。但我在网上找不到此类代码的描述。这叫什么?

>>> [0] * 7
[0, 0, 0, 0, 0, 0, 0]
python terminology
2个回答
23
投票

*
只是一个乘法 - 因为
+
对于列表来说是一个直观的事情,意味着连接两个操作数,下一步是乘以标量 -
[0] * N
意味着“将此列表与其自身连接 N 次”!

换句话说:

*
是Python中为其原始序列类型定义的运算符,也是一个用于将序列与其自身连接一定次数的整数。它将适用于列表、元组甚至字符串。

这在 Python 中有些自然,因为该语言允许运算符重载 - 因此 Python 程序员确实希望运算符对对象执行有意义的操作。

应注意组成结果列表的对象不是原始列表上对象的副本,而是对同一对象的引用。因此,如果原始列表的内容只是数字或其他一些不可变的对象,则不会出现任何意外 - 但如果它包含可变对象,例如内部列表,则在更改它们时可能会受到严重的副作用 - 就像这样片段:

In [167]: a = [[0]] * 7

In [168]: a
Out[168]: [[0], [0], [0], [0], [0], [0], [0]]

In [169]: a[0].append(1)

In [170]: a
Out[170]: [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1]]

14
投票

根据Python文档的描述,整数*

和原始序列类型之间使用的乘法运算符
n
对序列中的项目执行序列重复
n
次。所以我想您正在寻找的术语是“序列重复”。请注意,这不是“序列复制”,因为不会创建项目的副本 - 您拥有对完全相同序列的 
n 引用。

© www.soinside.com 2019 - 2024. All rights reserved.