在 python 中,['a'] * 4 给出 ['a', 'a', 'a', 'a']。为什么不是 [['a'], ['a'], ['a'], ['a']]?
请您参考如下方法:
因为,正如整数乘法是重复加法一样,lis 的乘法是重复串联。
>>> ['a'] + ['a'] + ['a'] + ['a']
['a', 'a', 'a', 'a']
>>> ['a'] * 4
['a', 'a', 'a', 'a']
>>> 4 * ['a']
['a', 'a', 'a', 'a']
这也遵守其他各种法律:
- 分布:
lst * n + lst * m == lst * (n + m) - 零属性:
lst * 0 == 0 * lst == [] - 多重恒等式:
lst * 1 == lst。
以上也符合空列表[]是加法恒等式,
['a'] + [] == [] + ['a'] == ['a']
自从
['a'] + [] == ['a'] * 1 + ['a'] * 0 # zero property and multiplicative identity
== ['a'] * (1 + 0) # distribution
== ['a'] * 1 # integer addition
== ['a'] # multiplicative identity
可以说,list * int 不应全部 定义。主要用例是快速生成 n 相同元素的列表,使用列表理解(后来添加到语言中)更安全。 [x] * n 创建对单个元素 x 的引用列表,如果 x<,这通常不是您想要的 是可变的。另一方面,[x for _ in range(n)] 创建一个由 x 定义的独立对象列表,是什么当 x 可变时,您需要。
