Python在特定条件下停止增加列表

时间:2019-01-27 06:23:07

标签: python loops if-statement

我正在尝试在列表中实现简单的向左旋转。 请查看以下内容 代码:`

def left_rotation(n,d,arr):
    temp = arr
    for i in range(n):
        print(temp[i])  # here is the problem
        if (i-d < 0):
            arr[i+n-d] = temp[i]
        else:
            arr[i-d] = temp[i]
    return arr
print(left_rotation(5, 4,[1,2,3,4,5]))

当我放置if-else结构时,它无法访问变量temp,但是当我移除if-else时,它可以工作。 您如何解释呢?

1 个答案:

答案 0 :(得分:4)

FUNCTION SPLIT : ARRAY[0..255] OF STRING(250) VAR_INPUT STR: STRING(250); CHAR: STRING(1); END_VAR VAR iPos: INT; sTest: STRING(250); iIndex: INT; xFinish: BOOL; END_VAR sTest := STR; REPEAT iPos := FIND(sTest, CHAR); IF iPos = 0 THEN SPLIT[iIndex] := sTest; xFinish := TRUE; ELSE SPLIT[iIndex] := LEFT(sTest, iPos - 1); sTest := RIGHT(sTest, LEN(sTest) - iPos); END_IF; iIndex := iIndex + 1; UNTIL (xFinish = TRUE) END_REPEAT; END_FUNCTION 不复制列表。它仅创建指向相同列表的新引用。要复制,您可以使用VAR arsTest: ARRAY[0..255] OF STRING(250); END_VAR arsTest := SPLIT('12345;12346B;12347A', ';');

temp = arr

这应该有效。 样本输出1:

temp = arr[:]

样本输出2:

def left_rotation(n,d,arr):
        temp = arr[:]
        for i in range(n):
            print(temp[i])  # here is the problem
            if (i-d < 0):
                arr[i+n-d] = temp[i]
            else:
                arr[i-d] = temp[i]
        return arr
    print(left_rotation(5, 4,[1,2,3,4,5]))