[英]Why Does Python List Multiplication Create A Single List with Multiple Elements?
在 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
是可变的时您想要的。
就像与数字的乘法['a'] * 4
等价于['a'] + ['a'] + ['a'] + ['a']
,因此['a', 'a', 'a', 'a']
。
['a'] * 4 == ['a'] + ['a'] + ['a'] + ['a']
['a'] + ['a'] = [['a'],['a']].
['a'] + ['a'] + ['a'] = [[['a'],['a']],['a']] #??
['a'] + ['a'] + ['a'] + ['a'] = [[[['a'],['a']],['a']],['a']] # ?????????
(['a']*2)*3 # what should be output of this?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.