Python:难以理解双前置函数

2024-09-25 02:38:17 发布

您现在位置:Python中文网/ 问答频道 /正文

在学习python的过程中,坚持理解这段代码。它是有效的,这本书要求我对它进行测试,我已经成功地进行了测试,但无法理解第一个索引是如何在代码中结束的。你知道吗

def double_preceding(values):
    """(list) -> NoneType

    Replace each item in the list with twice the value of the preceding item, and replace the first item with 0.

    >>> L = [l , 2 , 3]
    >>> double_preceding(L)
    >>> L
    (0, 2, 4]
    """

    if values != []:
        temp = values[0]
        values[0] = 0
        for i in range(1, len(values)):
            double = 2 * temp
            temp = values[i]
            values[i] = double

范围从索引1开始,它将跳过索引0,那么2的输出是如何进入的(从doctest)?这意味着值1增加了一倍,但是范围跳过了索引0。。。?你知道吗

还有一个问题,values[0] = 0是否将[0]中的值改为0?值“1”是如何在输出列表中加倍的?你知道吗

这是如此简单的代码,但却让我失去了理智。 提前谢谢!谢谢你的时间


Tags: the代码in过程defwithitemtemp
2条回答

这是一个有趣的循环,我将带您了解它的工作原理。你知道吗

语句if values != []:检查循环是否为空。如果没有,就继续。你知道吗

语句temp = values[0]在temp中存储values[0]的原始值。这就是程序知道如何将1加倍的原因。所以在我们的例子中,temp的值应该是1。你知道吗

下一步values[0] = 0将第一个元素的值设置为0,但是我们仍然知道数组的原始值是什么,因为我们将它存储在temp。你知道吗

现在我们开始循环。循环从1一直到循环结束。你知道吗

变量double保存temp乘以2的值。所以在我们的例子中,因为temp是1,所以double保持2。你知道吗

现在语句temp = values[i]将循环的当前迭代值存储在temp。在我们的示例中,我们将在第一次迭代中,因此由于values[1]是2,temp中有2。你知道吗

最后,语句values[i] = double在数组中存储double的值。目前,我们在索引1处,因为double是2,这就是该索引将具有的内容。你知道吗

我们可以再次循环这个序列。目前,我们的数组有{0,2,3}。在for的下一次迭代中,doubletemp*2。因为temp是2,double是4。现在double的值存储在数组的第二个索引中。行temp = values[i]将在temp中存储4,但这并不重要,因为循环已完成,因为数组的长度是3,循环仅在i<;3时重复。你知道吗

完成后,最后一个数组是{0,2,4}。你知道吗

def double_preceding(values):
    """(list) -> NoneType

    Replace each item in the list with twice the value of the preceding item, and replace the first item with 0.

    >>> L = [1 , 2 , 3]
    >>> double_preceding(L)
    >>> L
    (0, 2, 4]
    """

    if values != []:
        temp = values[0] # temp is 1 now
        values[0] = 0 #sets 1 to 0
        for i in range(1, len(values)): # start at second item in array and go until end
            double = 2 * temp # double it by the last (which is stored in temp)
            temp = values[i] # temp is now equal to the item we just doubled (the "preceding item")
            values[i] = double # change the value of the item at the index so it is actually the doubled item

相关问题 更多 >