【问题标题】:What does it print? (Lists) [closed]它打印什么? (列表)[关闭]
【发布时间】:2014-01-06 18:23:11
【问题描述】:

我很难理解这段代码,这是我即将进行的考试的练习。救命!

编程语言是python 2.7.5。问题是;什么是打印?

我知道答案是[5],但我不明白为什么。更具体地说,india() 函数中发生的事情,当它调用 india(list2, elem) 时无法跟随它。

def india(juliet, kilo):
    juliet[:] = juliet[1:3] + [kilo]
    kilo = juliet[1] + 1

def tilt(l):
    return l[2:]

list = [9,8,7,6]
elem = 5
list2 = list
india(list2, elem)
list = tilt(list2)
print list

【问题讨论】:

  • @RedX:没必要这么无礼。调试器是一种比大多数初学者都更先进的工具。
  • @MartijnPieters 他正在学习 Python 课程,所以我认为他们在课程中引入了调试器(希望如此)。如果没有,现在是学习的好时机。
  • 听说过IDLE 吗?
  • @RedX:这里的调试器不会告诉你任何关于值引用、重新绑定和通过切片分配改变可变列表对象的信息。
  • @RedX 我在大学的半打编码课程中从未接触过调试器。直到我的职业生涯开始,我才被介绍到断点、调用堆栈、源代码控制等工作。我希望我在大学里能更多地了解这一点,因为它让生活变得如此轻松。但是,我同时很高兴;让我更多地思考代码结构/流程

标签: python list python-2.7 printing


【解决方案1】:

这是一步一步发生的事情:

  1. juliet[1:3] + [kilo]:对输入列表进行切片,获取第二个和第三个值,然后将一个新列表与其中的kilo 值连接起来。结果:[8, 7, 5]
  2. 将步骤1中表达式的结果赋值给juliet的整个切片;这会将列表中的所有索引替换为在 1 中创建的新列表的值。结果:juliet 引用的列表对象现在包含值 [8, 7, 5]
  3. 将新juliet中的第二个值加1赋值给kilo,结果kilo被反弹到8

最后一步是无关紧要的,只有本地的kilo 名称被反弹,而传递给india() 函数的原始变量保持不变。另一方面,julia 引用的列表已更改原地,这意味着对它的list2list 引用都看到了相同的更改。

所以当india() 返回时,listlist2 都指向同一个列表对象,内容为[8, 7, 5]

在此之后,tilt() 返回list2 的切片,这将是一个 列表对象,只有list2 中的最后一个值,所以list 被反弹到@ 987654344@,然后打印出来。

如果您想在考试中获得额外分数,请指出使用 list 作为变量名不是一个好主意,因为这会影响内置的 list() 构造函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多