0

我创建了一个喜欢的列表,aa=[ [] for i in range(10)]并且我想要为每个元素分配!

我使用两种方法来做到这一点,但一种方法可以工作,另一种方法不能工作,我不知道为什么。

请告诉我!谢谢!

aa=[ [] for i in range(10)]

方法一:不能按我的意愿工作。

for a in aa:a=[2]   it get the result [[], [], [], [], [], [], [], [], [], []]

方法二:可以随心所欲。

for i in range(len(aa)): aa[i]=[2]

它得到结果

[[2], [2], [2], [2], [2], [2], [2], [2], [2], [2]]

我做了另一个测试:

for index,a in enumerate(aa): print aa[index] is `a`

结果都是真的。

我认为aaa[i]是一样的,但我找不到答案。

4

2 回答 2

2

第一个循环依次分配a给每个元素,但重新分配根本不影响。aa=aaa

第二个循环aa直接修改,如您所料。

为了演示第一个效果,稍微改变你的测试:

for index,a in enumerate(aa):
    print aa[index] is a  # should print 'True'
    a = [2]
    print aa[index] is a  # should print 'False' because you've reassigned a
于 2013-04-19T16:06:01.843 回答
1

在这里:

for a in aa:
  a = [2]

您没有分配给实际列表,只是分配给一个名为created 用于迭代列表aa的局部变量;a该变量a以前指向内部的一个位置,aa但现在您分配[2]给它,更改了变量的值,但根本没有修改aa。这就是为什么它不起作用。另一方面,在这里:

for i in range(len(aa)):
    aa[i] = [2]

实际上是在修改内部的位置aa,因此[2]在该位置分配了值aa[i]

于 2013-04-19T16:05:26.537 回答