我对Python没有太多经验。 我想要做的就是在嵌套列表中插入元素。我有两个看上去相似的列表,但是它们的行为完全不同。
$
当我输出print时,这两个列表都给出相同的输出:
list1 = [['a','b']] * 3
list2 = [['a','b'],['a','b'],['a','b']]
但是当我尝试在嵌套列表中插入元素时,两者都以不同的方式做到了。下面是在嵌套列表中插入元素的代码。
[['a', 'b'], ['a', 'b'], ['a', 'b']]
此输出
list1 = [['a','b']] * 3
for item in list1:
item.append("Hello")
print (list1)
当我以以下方式定义列表时,它确实可以实现我想要的功能。
[['a', 'b', 'Hello', 'Hello', 'Hello'], ['a', 'b', 'Hello', 'Hello', 'Hello'], ['a', 'b', 'Hello', 'Hello', 'Hello']]
这给出以下输出:
list2 = [['a','b'],['a','b'],['a','b']]
for item in list2:
item.append("Hello")
print (list2)
这两个为什么表现不同?
[['a', 'b', 'Hello'], ['a', 'b', 'Hello'], ['a', 'b', 'Hello']].
list1 = [['a','b']] * 3
Screenshot of Program output
答案 0 :(得分:2)
在此处使用*
运算符时,您说的是“我想要其中的3个”。
因此,您将获得3个对同一['a', 'b']
的引用。在您的情况下,您要将'Hello'
添加到相同的['a', 'b']
引用中。
List of lists changes reflected across sublists unexpectedly
如果要创建3个单独的引用,请尝试使用列表理解:
>>> x = [['a', 'b'] for i in range(0, 3)]
>>> x
[['a', 'b'], ['a', 'b'], ['a', 'b']]
>>> x[0].append('Hello')
>>> x
[['a', 'b', 'Hello'], ['a', 'b'], ['a', 'b']]
答案 1 :(得分:2)
list1 = [['a', 'b']] * 3
如您所知,这将创建一个列表列表。但是,嵌套列表实际上是对同一列表对象的所有引用。
因此,当您使用{p>
list1
for item in list1:
在每次迭代中都引用相同的列表对象。所以您重复追加到同一列表。
另一方面,示例代码中的item
被明确分配了一个包含三个不同列表的列表。这些列表碰巧具有相同的元素,但是它们是不同的列表。