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


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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值