【问题标题】:Functioning of list values in Python [duplicate]Python中列表值的功能[重复]
【发布时间】:2014-12-27 07:03:27
【问题描述】:

我正在学习python(之前有一点c经验)并试图解决一个数学问题,但遇到了一些意想不到的事情:

import math
list_a = list_b = [0 for k in range(10)]
print list_a[0] #test if list_a works]
for i in range(10):
    list_a[i] = math.sqrt(math.pi + i**2)
    print list_a[i]                                      #value
    list_b[i] = math.sqrt(list_a[i]**2 + math.pi**2)
    print list_a[i]                                      #why changed to another value?
    print '-----------------'

为什么在这行之后:

list_b[i] = math.sqrt(list_a[i]**2 + math.pi**2) 

list_a[i] 改变了吗?

【问题讨论】:

  • list_alist_b 引用同一个列表对象。

标签: python list


【解决方案1】:

list_alist_b 是同一对象的标签。如果您希望它们成为副本,请执行以下操作:

list_a = [0 for k in range(10)]
list_b = list_a[:]

另一种方法是使用列表推导和 python 的多重赋值:

list_a, list_b, list_c = [[0 for k in range(10)] for i in range(3)]

【讨论】:

  • 感谢您的帮助!顺便说一句,如果我想同时清除多个列表,有没有更简单的方法?
  • @michaelhuang 你可以同时定义变量,比如; a,b,c,d=1,2,3,4。所以,对列表变量执行此操作。
  • @michaelhuang 已编辑。
  • @Pradhan 经过测试,终于可以优雅地工作了!非常感谢!! PS:a detailed way to declare many lists
【解决方案2】:
list_a = list_b = [0 for k in range(10)]

因为list_a 等于list_b。所以如果 list_b 改变了,那么 list_a 也会改变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多