如何在Python的嵌套列表中插入元素?

时间:2018-09-27 15:34:10

标签: python python-3.x python-2.7 nested-lists

我对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

2 个答案:

答案 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被明确分配了一个包含三个不同列表的列表。这些列表碰巧具有相同的元素,但是它们是不同的列表。