我正在尝试在列表中实现简单的向左旋转。 请查看以下内容 代码:`
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
时,它可以工作。
您如何解释呢?
答案 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]))