ARTS - 第二期

ARTS挑战

Algorithm : 编程训练和学习 —— 每周至少做一个LeetCode算法题。

Review : 学习英文 —— 阅读并点评至少一篇英文技术文章。

Tip : 总结和归纳知识点 —— 学习至少一个技术技巧。

Share : 建立影响力,能够输出价值观 —— 分享一篇有观点和思考的技术文章。

文中涉及语言均为Python。

Algorithm

题目

20. 有效的括号

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。

  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1: 输入: “()”,输出: true

示例 2: 输入: “()[]{}”,输出: true

示例 3: 输入: “(]” ,输出: false

示例 4: 输入: “([)]” , 输出: false

示例 5: 输入: “{[]}” , 输出: true

思路

  1. 如果是左括号,加入栈中;

  2. 如果是右括号,栈为空 直接返回False,栈不为空;

  3. 则看此对应左括号与栈顶元素是否一致,如果一致,将栈顶元素消除;
    若完全配对,一一消除后栈中应为空,返回True;若仍有元素,返回False。

代码

class Solution:
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        stack = [] #创建栈
        dic = {')': '(', '}': '{', ']': '['} #字典存储配对括号,右括号为键
        for i in s:
            if i not in dic: #若i非右括号,即左括号
                stack.append(i) #将左括号加入栈中
            elif stack == [] or dic[i] != stack.pop(): 
            #若i为右括号且栈为空,或右括号对应的左括号与栈顶元素不一致
                return False
        return stack == []

时间复杂度:O(n),空间复杂度:O(n)。

Review

Python for Data Science: 8 Concepts You May Have Forgotten

有关Python、NumPy、Pandas的8个重要概念:

  1. One-Line List Comprehension:Python特有的列表/字典推导式,代替for/if嵌套写法,简写为一行
l = [i*i for i in range(1,11) if (i % 2) == 0]
d = {i:0 for i in list_b}
  1. Lambda Functions:Lambda表达式,代替简小函数式,省略函数命名(匿名函数)
  2. Map and Filter:Python内置函数
  3. Arange and Linspace:NumPy.arange
  4. What Axis Really Means
df.drop('Row A', axis=0)        # axis=0 行
df.drop('Column A', axis=1)     # axis=1 列

从Pandas调用shape属性提供一个元组,其中第一个值表示行数,第二个值表示列数。如果考虑如何在Python中对其进行索引,“行”为0且“列”为1,与声明轴值的方式相似。

df.shape
(# of Rows, # of Columns)
  1. Concat, Merge, and Join:Pandas数据合并与重塑
  2. Pandas Apply:Pandas之Series, Pandas.DataFrame
  3. Pivot Tables:Pandas.pivot_table

Tips

Python内置函数: filter(), map(), reduce(), zip()

# filter(function or None, iterable)
a = [1, 2, 3, 4, 5]
print(list(filter(lambda x: x > 2, a)))   # Output: [3, 4, 5]

# map(func, *iterables) 多参数依次处理
a = [1, 2, 3]
b = [4, 5, 6]
print(list(map(lambda x, y: x + y, a, b)))   # Output: [5, 7, 9]

# reduce(function, sequence[, initial) 需导入模块,不可直接使用
from functools import reduce
reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])   # 即((((1+2)+3)+4)+5)
reduce(lambda x, y: x + y, [2, 3, 4, 5], 1)   # 同上

# zip() 将两元组纵向整合形成字典
for i in zip((1, 2, 3), (4, 5, 6)):   # zip()为可迭代函数,可用for搭配使用
    print(i)

Output: 
(1, 4)
(2, 5)
(3, 6)

# zip() 实现字典键与值交换位置
dict_a = {'a': 'aa', 'b': 'bb'}
dict_b = zip(dict_a.values(), dict_a.keys())
print(dict(dict_b))   # Output: {'aa': 'a', 'bb': 'b'}

Share

Python项目的测试工具推荐:

适用macOS系统,Python3.7以上版本

  1. Install Black:代码格式化 - PEP 8 style (guide)
  2. Create .pycache:此配置文件主要用于上传包到PyPI时验证权限。在用户根目录下创建文件~/.pypirc
  3. Install pytest:pytest是一个非常成熟的全功能的Python测试框架 (tutorial)
  4. Create Tests:以“test_”为开头命名文件,编写pytest测试样例
  5. Sign up for Travis CI and Configure:Travis CI是一个在线分布式持续集成服务,用来构建及测试在GitHub托管的代码
  6. Create .travis.yaml:Travis 要求项目的根目录下面,必须有一个.travis.yml文件。这是配置文件,指定了 Travis 的行为。该文件必须保存在 Github 仓库里面,一旦代码仓库有新的 Commit,Travis 就会去找这个文件,执行里面的命令。
  7. Test Travis CI
  8. Add Code Coverage:计算pytest代码覆盖率,输出测试报告
  9. Add Coveralls:报告自动测试的测试覆盖率
  10. Add PyUp:识别程序包关联项是否已过期或存在安全漏洞

Reference:

10 Steps to Set Up Your Python Project for Success

Exception and Error Handling in Python


如有任何疑问或错误,欢迎指出。

猜你喜欢

转载自blog.csdn.net/Treasure99/article/details/89303113