python - 为什么 Python 列表乘法创建一个包含多个元素的列表?

标签 python list

在 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/

相关文章:

带有外部函数的Python工厂方法

Python。将标准输出重定向到套接字

python - 域名检测

C# 循环遍历 IEnumerable 以进行使用前 n 个和后 n 个元素的计算

python - 从单词列表创建字谜列表

list - SWI-Prolog : How to stop the predicate when the list is empty?(包括谓词)

python - 用来自两个不同列表的值替换列表的 boolean 值

python - theano 给出 "...Waiting for existing lock by unknown process..."

python - 在 2D 数组中生成具有 N 个图 block 的实体形状

python - 有一个名称/值集合,想要将其写入文件