Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Python列表乘法会创建一个包含多个元素的列表?_Python_List - Fatal编程技术网

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

为什么Python列表乘法会创建一个包含多个元素的列表?,python,list,Python,List,在python中,['a']*4给出了['a','a','a']。为什么不['a'],['a'],['a'],['a'],['a'],['a']]?很像数字乘法['a']*4相当于['a']+['a']+['a'],因此['a','a','a']很像数字乘法['a'][/a']//code>相当于['a']++/a'>,因此['a','a','a','a']因为,正如整数的乘法是重复的加法一样,与lis的乘法是重复的串联 >>> ['a'] + ['a'] + ['a'] +

在python中,
['a']*4
给出了
['a','a','a']
。为什么不
['a'],['a'],['a'],['a'],['a'],['a']]

很像数字乘法
['a']*4
相当于
['a']+['a']+['a']
,因此
['a','a','a']

很像数字乘法
['a'][/a']//code>相当于
['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']



可以说,
list*int
根本不应该定义。主要用例是快速生成
n
相同元素的列表,使用列表理解(稍后添加到语言中)更安全
[x]*n
创建单个元素
x
的引用列表,如果
x
是可变的,则通常不需要该列表<另一方面,code>[x代表范围内(n)]
创建一个由
x
定义的独立对象列表,这是当
x
可变时所需要的。

因为,就像整数的乘法是重复加法一样,与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']


可以说,
list*int
根本不应该定义。主要用例是快速生成
n
相同元素的列表,使用列表理解(稍后添加到语言中)更安全
[x]*n
创建单个元素
x
的引用列表,如果
x
是可变的,则通常不需要该列表<另一方面,code>[x代表范围(n)]
创建由
x
定义的独立对象列表,这是当
x
可变时所需的对象。

  • 好好想想
  • 添加两个列表将给出一个列表。这是用python定义的行为
  • 如果你说的是真的
  • 那么这个输出应该是什么呢
  • 好好想想
  • 添加两个列表将给出一个列表。这是用python定义的行为
  • 如果你说的是真的
  • 那么这个输出应该是什么呢


我不同意-每个加数本身就是一个列表。不同意什么?这就是<代码> >代码> > <代码>列表>代码>操作数的方法。如果您对<代码> *>代码>的混合操作数感到困扰,请考虑法律<代码> LST*n+LST*M==LST*(n+m)< /代码>,使用<代码> LST 0==[]/Calp>。注意
'a'*4=='aaaa'
哪个将首先计算…我不同意-每个加数本身就是一个列表。不同意什么?这就是<代码> >代码> > <代码>列表>代码>操作数的方法。如果您对<代码> *>代码>的混合操作数感到困扰,请考虑法律<代码> LST*n+LST*M==LST*(n+m)< /代码>,使用<代码> LST 0==[]/Calp>。请注意,
'a'*4=='aaaa'
将首先对其进行评估…如果您执行[['a']],您将得到希望得到的结果。你是在乘以列表中的元素,而不是列表本身。这类问题实际上可以归结为“因为设计语言的人认为这应该意味着”@MWaz我会小心的。列表乘法将为您提供重复的对象,当对象是可变的时,这可能会导致令人惊讶的结果。您是否接受“单一平面列表比嵌套列表更易于使用,并且有更多的用例”作为答案?我对@MWaz和juanpa的组合注释感到满意。我认为他们应该给出一个答案:“这是Python的工作方式”,以及“你在乘以列表中的元素,而不是列表。”如果你这样做[['a']],你就会得到你想要的结果。你是在乘以列表中的元素,而不是列表本身。这类问题实际上可以归结为“因为设计语言的人认为这应该意味着”@MWaz我会小心的。列表乘法将为您提供重复的对象,当对象是可变的时,这可能会导致令人惊讶的结果。您是否接受“单一平面列表比嵌套列表更易于使用,并且有更多的用例”作为答案?我对@MWaz和juanpa的组合注释感到满意。我认为他们应该给出一个答案:“这是Python的工作方式”,以及“你是在乘以列表中的元素,而不是列表。”在我看来,这里一定有一个隐含的假设,它让你明白了一些对我来说不明显的东西。对我来说,添加多个“list”类型的项目显然会导致多个“list”类型的项目。我认为到目前为止的答案和评论相当于“因为Python就是这样做的。”我在想,也许有一些隐藏的集合理论或背景中正在发生的事情。列表实际上是一个自由的幺半群,而幺半群是由一组元素,一个
['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?