【问题标题】:How to implement a way to remove pairs in array如何实现一种删除数组中对的方法
【发布时间】:2020-10-06 19:25:54
【问题描述】:

我正在解决一个问题,该问题需要我删除字符串数组中的“对”(南北和东西对)。我不确定在 Python 上解决这个问题的方法。

问题来了:

编写一个函数 dirReduc,它将接受一个字符串数组并返回一个字符串数组,其中删除了不必要的方向(WE 或 SN 并排)。 (问题链接:https://www.codewars.com/kata/550f22f4d758534c1100025a

一些测试输入和输出:

Input  : ["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]
Output : ["WEST"]

Input  : ["NORTH", "WEST", "SOUTH", "EAST"]
Output : ["NORTH", "WEST", "SOUTH", "EAST"]

第二组输入和输出对于任务没有多大意义。我最初的想法是使用堆栈,但现在我不确定该怎么做。

【问题讨论】:

  • 尝试使用一个记录每个方向出现次数的字典
  • 有趣的是["NORTH", "WEST", "SOUTH", "EAST"] 不是[],因为你刚刚绕了一圈又回到了起点。

标签: python arrays list algorithm


【解决方案1】:

一个简单的实现可以只使用字典来定义相反的方向。在处理列表时,如果当前方向与最后一个方向相反,则从输出中删除最后一个。否则,将新方向添加到列表中:

dirs = {'NORTH': 'SOUTH', 'SOUTH': 'NORTH', 'EAST': 'WEST', 'WEST': 'EAST'}

def dirReduc(input):
    output = []

    for dir in input:
        if output and output[-1] == dirs[dir]:
            output.pop()
        else:
            output.append(dir)

    return output

print(dirReduc(["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]))
print(dirReduc(["NORTH", "WEST", "SOUTH", "EAST"]))

【讨论】:

  • 这太棒了。谢谢!我不知道为什么我从未想过使用字典进行配对。
猜你喜欢
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 2021-08-11
相关资源
最近更新 更多