【问题标题】:How to get the list append right with if-elif?如何使用 if-elif 正确附加列表?
【发布时间】:2020-06-25 05:26:00
【问题描述】:

以下代码---

lu,area = ([],)*2
row = [10,20]
column = [1,2]

for x in row:
  for y in column:
            if y==1:
                lu.append(y)
                print(lu)
                print(area)
                
            elif y==2:
                area.append(y)
                print(lu)
                print(area)

正在打印 ---

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

但是,想要的结果是---

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

尽管有 if-elif 逻辑,为什么两个列表都被附加在一起?

感谢您抽出时间提供帮助。

【问题讨论】:

    标签: python-3.x list if-statement


    【解决方案1】:

    你的第一行,lu,area = ([],)*2,太可爱了。它等价于lu = area = [],两个变量都引用同一个(最初为空的)列表对象。当您稍后开始追加到列表时,您使用哪个变量名并不重要,所有值最终都会在一起。

    您可能想要的是lu, area = [], [],它将变量绑定到单独的空列表。您甚至可能希望在不同的行上完成作业,以使事情更加清晰:

    lu = []
    area = []
    

    【讨论】:

    • 大声笑。我从没想过问题出在可爱的初始化上。感谢您帮助@Blckknght!
    【解决方案2】:

    你写lu,area = ([],)*2的第一行有问题
    当您以这种方式使用* 运算符时,python 会创建引用同一对象的多个副本。因此,当您使用任一变量更改其值时,它会更改同一个对象。

    Blckknght's answer 中所述,您可以这样做
    lu,area = [], []

    检查此类问题的一种简单方法是使用is 关键字。如果您输入lu is area,它会返回true,这意味着它们是同一个对象。但是在执行lu, area = [],[] 之后,你会得到false 作为返回值,这表明它们是不同的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-20
      • 2021-02-25
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      相关资源
      最近更新 更多