【问题标题】:Why does this python left rotation of an array not work为什么这个python左旋转数组不起作用
【发布时间】:2022-01-19 12:44:32
【问题描述】:

我一直在尝试 HackerRank 练习题,但我不知道为什么我的左旋转算法不起作用。我在网上看过,但我看不到有人试图像我一样做这件事。任何帮助将不胜感激。

a = 数组 d = 左转次数

示例: a = 1 2 3 4 5 d = 4

输出 = 5 1 2 3 4

def rotLeft(a, d):
    out = a
    length = len(a)
    startingposition = 0

    for number in a:
        position = startingposition
        for count in range(d):
            position -= 1
            if position == -1:
                position = length 
        startingposition += 1
        out[position] = number

    return(out)

【问题讨论】:

  • 请提供参数和预期输出
  • 你认为out = a 复制了a 吗?它没有。它只是创建了对a 的另一个引用。所以out[position]a 进行了更改。这可能是您的代码不起作用的原因吗?
  • 我知道你尝试解决这个问题的方法,但是使用position 加上if 的循环使用mod 会更好
  • 如果要将a 旋转到位,请返回None。如果您想创建一个新的轮换来源,请保持 a 不变并返回新列表。除非您有非常充分的理由,否则不要混合使用这两种方法。
  • Off-by-one errors 很常见。它甚至 been written 说“计算机科学中有 2 个难题:缓存失效、命名事物和 off-by-1 错误。”

标签: python arrays


【解决方案1】:

既然你已经解决了,我可以添加几个其他的解决方案。

首先是一个简单的:

def rotLeft1(a):
    return a[1:] + [a[0]]

def rotLeft(a, d):
    for _ in range(d):
        a = rotLeft1(a)
    return a

然后是一次不迈出一步的人:

def rotLeft(a, d):
    i = d % len(a)
    return a[i:] + a[:i]

【讨论】:

  • 如何以如此简单的方式制作,令人印象深刻!
  • @ChristianFinn。你了解它的工作原理吗?
猜你喜欢
  • 2013-04-26
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
  • 2011-10-13
  • 2021-12-20
  • 2013-04-04
  • 2015-05-21
相关资源
最近更新 更多