在给定索引之间反转数组

2024-09-29 03:32:33 发布

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

有人问我一个面试问题来扭转阵势。我用了下面的方法,果然奏效了:

def reverse(array, i, j):
  if i > j: # ensure i <= j
    i, j = j, i
  while i < j:
    array[i], array[j] = array[j], array[i]
    i += 1
    j -= 1 

现在,面试官让我把上面的while循环替换成for,我真的很困惑。有人能帮我吗。提前谢谢。在


Tags: 方法forifdefarrayreversewhileensure
3条回答

这不是for,但您也可以执行以下操作:

如果遵循python逻辑,其中[i:j]表示i<;=x<;j,则可以执行以下操作:

array[i:j] = array[j-1:i-1:-1]

另一种方法是,如果您想得到i<;=x<;=j的元素,那么可以按照@darksky的建议:

^{pr2}$

您可以完全忘记for循环,然后执行如下操作:

def reverse(array, i, j):
    # Make sure i is less than j
    if i > j:
        i, j = j, i
    # Reverse array[i:j+1]
    section = array[i:j+1]
    section.reverse()
    array[i:j+1] = section

j+1是为了与函数的行为保持一致;i和{}都被视为包含的,但是Python希望[包含,排除]。)

或者,如果希望保留for循环并避免使用标准函数,则可以执行以下操作:

^{pr2}$

这里的其他答案以非常聪明的方式执行此操作,但是for循环应该类似于:

for x in range(j - i):
    array[i+x], array[j-x] = array[j-x], array[i+x]

相关问题 更多 >