在 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
可变时,您需要。
关于python - 为什么 Python 列表乘法创建一个包含多个元素的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58633413/