Python如何找到目录迭代的最小移动量-搜寻器

时间:2019-02-16 16:35:32

标签: python python-3.x web-crawler iteration

我正在开发一个Python(3)程序,在该程序中,我必须通过使用输入作为多次迭代的列表来返回目录迭代的移动次数,这表示各种操作,例如:

  • ../表示移动到当前文件夹的父文件夹。
  • ./保留在同一文件夹中
  • x/移至名为x
  • 的子文件夹

实际上,我必须编写Python函数来返回一个整数,该整数显示从当前文件夹移至主目录的最小步骤数。我该如何实现?

所以,这是一个例子:

输入:

5
x/
y/
../
z/
./

输出:

2

说明: 搜寻器将两个文件夹从主目录向下移动到文件夹y,向上移动一个文件夹,然后向下移动到另一个文件夹z,因此,两个移动是正确的答案,其中一个是父文件夹{ {1}},然后到父目录和 第一个整数显示移动的总数。 而这是我尝试过的:

x

2 个答案:

答案 0 :(得分:1)

您可以建立一堆招式:./什么都不做,.. /使您上一层楼,所以我们弹出最后一招,其他任何东西都会增加一个等级。

请注意,由于我们不知道从其开始的目录的名称,因此只能假设我们永远都不能超过它-否则,我们不知道是否回到该目录。 / p>

因此,您可以这样做:

def absolute_moves(moves):
    absolute = []
    for move in moves:
        move = move.strip('/') 
        if move == '.':
            continue
        elif move == '..': 
            try:
                # we go one level up
                absolute.pop()
            except IndexError:
                # we tried to go higher than the start dir
                pass # if we suppose we were at the top level
        else:
            absolute.append(move)
    return absolute

moves = ['x/', 'y/', '../', 'z/', './']
shortest = absolute_moves(moves)

print('Shortest path: {}, length: {}'.format(shortest, len(shortest)))
# Shortest path: ['x', 'z'], length: 2

答案 1 :(得分:0)

上一个答案有效,但是就空间而言并不是最优化的,尤其是当您不需要路径,而只是从当前目录到父目录的最小移动量时。

不需要存储堆栈,这是一个非常简单的问题

def absolute_moves(moves):
  absolute = 0
  for move in moves:
    if(move == "../"):
      absolute += 1
    elif(move != "./"):
      absolute -= 1
  return absolute