什么印刷? (列表)

时间:2013-12-18 14:11:16

标签: python list python-2.7 printing

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

编程语言是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

1 个答案:

答案 0 :(得分:5)

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

  1. juliet[1:3] + [kilo]:对输入列表进行切片,获取第二个和第三个值,并将新列表与其中的kilo值连接起来。结果:[8, 7, 5]
  2. 将步骤1中表达式的结果分配给juliet的整个切片;这将使用在1中创建的新列表的值替换列表中的所有索引。结果:juliet引用的列表对象现在包含值[8, 7, 5]
  3. 将新juliet中的第二个值加1加至kilo,结果是kilo反弹为8
  4. 最后一步是无关紧要的,只有本地kilo名称是反弹,而原始变量传递给india()函数不变。另一方面,julia引用的列表已更改到位,这意味着list2list对它的引用都会反映出相同的更改。

    因此,当india()返回时,listlist2都会引用内容为[8, 7, 5]的相同列表对象。

    在此之后,tilt()会返回一个list2切片,该切片将是列表对象,只有list2中的最后一个值,因此{ {1}}会反弹到list,然后打印出来。

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