繁体   English   中英

为什么 Python 列表乘法创建具有多个元素的单个列表?

[英]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']
  • 添加两个列表应该给出列表。 这是使用 python 定义的行为。
  • 如果你说的是真的那么。
['a'] + ['a'] = [['a'],['a']].
  • 这应该是什么output?
['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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM