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

ste*_*ith 9 python terminology

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

>>> x = [0]*7
>>> x
[0, 0, 0, 0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)

jsb*_*eno 20

*只是一个乘法 - 因为+列表是一个直观的东西,意味着连接两个操作数,下一步是乘以标量 - [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]]
Run Code Online (Sandbox Code Playgroud)


mir*_*ulo 13

Python文档的描述中,在*整数n和基本序列类型之间使用的乘法运算符在序列n时间中执行项目的序列重复.所以我认为你要找的术语是序列重复.请注意,这不是"序列复制",因为没有创建项目的副本 - 您n引用了相同的序列.

  • 希望我能接受两个答案.谢谢你们俩.史蒂夫S. (2认同)