为什么Python列表乘法会创建一个包含多个元素的列表?
在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'] +
['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?