代码之家  ›  专栏  ›  技术社区  ›  user3285099

正在反转python列表的一部分吗

  •  1
  • user3285099  · 技术社区  · 7 年前

    a[i:j] = a[i:j][::-1] # is this in place? Does this operation require O(j-i) space
    

    以下代码是否不占用任何额外空间?

    a[i:j] = reversed(a[i,j])
    

    那个么,除了下面的代码外,还有其他方法可以用O(1)空格反转列表的一部分吗?

    for k in range(i, i + (j-i + 1)//2):
      arr[k], arr[j-k] = arr[j-k], arr[k]
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   chepner    7 年前

    有点 a 修改到位,但 a[i:j] 创建一个新的列表对象,就像应用 [::-1] a[i:j] .

    b = a[i:j]  # new list object
    b = b[::-1] # another new list object
    a[i:j] = b  # modifies a in place