【问题标题】:Python uncaught List variable's behavior [duplicate]Python未捕获列表变量的行为[重复]
【发布时间】:2013-09-21 07:41:19
【问题描述】:

谁能解释一下我得到的输出。作为第一次变量lists 为空白,但当data[i]10 附加到lists[i] 时,它变为

List:  [[10], [10, [10]]

我不知道这个长长的列表是怎么来的。我是 python 的新手,想追踪它的行为。这是代码

data = [10, 20, 30]
list1 = list2 = list3 = list()
lists = [list1, list2, list3]

for i in range(len(data)):
  lists[i].append(data[i])
  print '-------------------'
  print 'at %s' %(i)
  print '  List:  %s' % (lists)
  print '  Data: %s' %  (data[i])

和回应

-------------------
at 0
 List:  [[10], [10], [10]]
 Data: 10
-------------------
at 1
List:  [[10, 20], [10, 20], [10, 20]]
Data: 20
-------------------
at 2
List:  [[10, 20, 30], [10, 20, 30], [10, 20, 30]]
Data: 30

【问题讨论】:

  • @lejlot,不,它不是您提到的帖子的完整副本。这里我需要 Rohit 提到的帖子中完美解释的解释
  • 在两个问题中都有解释,而在 Rohit 标记的问题中实际上有点不同,因为它还显示了列表乘法操作如何处理引用(不是这样 这里)。但这并不是很重要,无论哪种方式 - 这是一个重复的问题,并且已经在网站上提供了很好的答案,希望他们帮助您理解这个问题:)

标签: python python-2.7


【解决方案1】:

这是一个无效问题(它包含随后提供的其他代码的输出),您可能在解释器中多次运行第二个(初始化后)部分。你的代码输出应该是这样的

-------------------
at 0
  List:  [[10], [10], [10]]
  Data: 10
-------------------
at 1
  List:  [[10, 20], [10, 20], [10, 20]]
  Data: 20
-------------------
at 2
  List:  [[10, 20, 30], [10, 20, 30], [10, 20, 30]]
  Data: 30

在 Python 2.7 上测试

this question已经回答了“多次添加”的问题,所以我不再重复这个信息。

【讨论】:

  • 是的,你是对的,我不小心这样做了.. 我承认我的错误谢谢你的帮助
【解决方案2】:

很确定输出不是来自您发布的完整代码。它看起来很像您附加到的列表(您只有一个,尽管所有名称 list1、list2、list3 和 lists[i] 都引用它)并没有为循环的每次运行重新创建,这是完成的通过您发布的代码的第二行和第三行。

【讨论】:

  • 是的,你是对的,我已经执行了这段代码,我不知道使用 ipython 到终端多少次,因为得到了响应,但现在我已经改进了它对 i in range(len( data)): ....: 列表[i].append(data[i]) ....: print '--------------------' .. ..: print 'at %s' %(i) ....: print ' List: %s' % (lists) ....: print ' Data: %s' % (data[i])跨度>
  • 感谢您的提示,现在一切都结束了
猜你喜欢
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 2016-09-04
  • 2014-06-14
  • 2013-02-21
  • 1970-01-01
  • 2021-03-21
  • 2012-02-17
相关资源
最近更新 更多