Skip to content

python

栈的应用(python):前缀表达式 <- 中缀表达式 -> 后缀表达式

1. 栈的实现

可使用列表,按自己的方式实现栈的数据结构。类的方法可以实现栈的基本操作。

既然是用列表实现的,可以创造一些方便的方法比如__repr__以方便查看栈的内容。

class Stack():
    def __init__(self):            # 使用空列表初始化栈
        self.items = []

    def isEmpty(self):             # 查看栈是否为空
        return self.items == []

    def push(self, item):          # 入栈基操
        self.items.append(item)

    def pop(self):                 # 出栈基操
        return self.items.pop()

    def peek(self):                # 查看栈顶元素
        return self.items[len(self.items) - 1]

    def __len__(self):             # 使用列表特性,返回栈的长度
        return len(self.items)

    def __getitem__(self, n):      # 使用列表特性,获取栈元素
        return self.items[n]

    def __repr__(self):            # 使用列表特性,打印栈内容
        if self.items:
            return str(self.items)
        else:
            return 'None'

2. 前缀表达式 <- 中缀表达式 -> 后缀表达式

  • 中缀表达式: 人类通常使用的表达式,易于人的理解
  • 前缀表达式: 计算机通常使用的表达式,易于机器理解与执行
  • 后缀表达式: 同上。

要理解这三种表达式,可以通过以下实例理解:

中缀表达式 前缀表达式 后缀表达式
A + B + A B A B +
A + B - C - + A B C A B + C -
A + B * C + A * B C A B C * +
(A + B) * C * + A B C A B + C *
A + B * C - D - + A * B C D A B C * + D -
(A + B) * (C - D) * + A B - C D A B + C D - *
A * B + C / D + * A B / C D A B * C D / +
A + B - C + D + - + A B C D A B + C - D +

使用pathlib替换os/os.path/glob

总结

从Python3.6开始,pathlib.Path 对象几乎可以在任何已经使用路径字符串的地方工作。因此,如果你使用的是Python3.6(或更高版本),我认为没有理由不使用 pathlib。

pathlib可以把以前比较繁复的路径工作处理得更简洁一点,请好好使用。

如果需要操作路径,在python3.6以前会经常使用os模块(mkdir、getcwd、chmod、stat、remove、rename 、rmdir、 chdir......)。现在比较推荐使用pathlib。pathlib模块用 path 对象上的方法替换了许多这些与文件系统相关的 os功能。

以下分段展示两个代码的不同实现方式,可以看出pathlib更简洁高效。

1. 新建文件夹与重命名

import os
import os.path

#创建了first/second目录
os.makedirs(os.path.join('first', 'sencond'), exist_ok=True)
#将 sau.txt 文件重命名为 first/sau.txt.bak,并移到first目录下
os.rename('sau.txt', os.path.join('first', 'sau.txt.bak'))

使用 Path 对象执行相同的操作,由于采用链式调用的方法,pathlib 代码将路径放在第一位。

from pathlib import Path

Path('first/second').mkdir(parents=True, exist_ok=True)

前提是移动目的地的文件结构要已经存在,rename不会给你在移动过程中新建文件结构。

from pathlib import Path

Path('sau.txt').rename('src/sau.txt.bak')