什么印刷?(列表)

use*_*527 2 python printing list python-2.7

我很难理解这段代码,这是我即将到来的考试的练习.救命!

编程语言是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
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

以下是一步一步发生的事情:

  1. juliet[1:3] + [kilo]:对输入列表进行切片,获取第二个和第三个值,并将新列表与其中的kilo值连接起来.结果:[8, 7, 5].
  2. 将步骤1中表达式的结果分配给整个切片juliet; 这将使用在1中创建的新列表的值替换列表的所有索引.结果:julietnow 引用的列表对象保存值[8, 7, 5].
  3. 在new juliet中加上第二个值加1 kilo,结果kilo是反弹到8.

最后一步是无关紧要的,只有本地kilo名称被反弹,原始变量传递给india()函数不受影响.julia另一方面,引用的列表已在适当的位置进行了更改,这意味着对它的引用list2list反映都会反映出相同的更改.

所以,当india()收益,listlist2都是指与内容相同的列表对象[8, 7, 5].

在此之后,tilt()返回一个切片list2,它将是一个新的列表对象,只有最后一个值list2,因此list被反弹到[5],然后打印出来.

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