博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ARTS - Week 2
阅读量:6862 次
发布时间:2019-06-26

本文共 2943 字,大约阅读时间需要 9 分钟。

ARTS挑战

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

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

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

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

文中涉及语言均为Python。

Algorithm

题目

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

有效字符串需满足:

  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、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. :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. :Pandas数据合并与重塑
  2. :Pandas之Series, Pandas.DataFrame
  3. :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 reducereduce(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 :代码格式化 - PEP 8 style ()
  2. Create .pycache:此配置文件主要用于上传包到PyPI时验证权限。在用户根目录下创建文件~/.pypirc
  3. Install :pytest是一个非常成熟的全功能的Python测试框架 ()
  4. Create Tests:以“test_”为开头命名文件,编写pytest测试样例
  5. for 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 :报告自动测试的测试覆盖率
  10. Add :识别程序包关联项是否已过期或存在安全漏洞

Reference:


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

转载于:https://juejin.im/post/5c9f1caf6fb9a05e3345c875

你可能感兴趣的文章
Spring学习手册番外:<context:annotation-config/> 和 <mvc:annotation-driven /> 的区别
查看>>
iOS走近商城APP(四 runloop应用 获取通讯录并处理)
查看>>
git提交pull request到主项目
查看>>
Redis Manager 主要功能介绍
查看>>
如何优雅的使用Mock Server
查看>>
Android 系统启动(一)---fork机制
查看>>
你知道的Axios
查看>>
TTL 消息详解
查看>>
Comparable和Comparator的比较
查看>>
ApplicationId 与 PackageName 的区别
查看>>
阿里云 Aliplayer高级功能介绍(三):多字幕
查看>>
React基础——快速搭建开发环境
查看>>
最火的前端开发框架Bootstrap使用教程学习!
查看>>
echarts树图控件分析
查看>>
理解Golang的Time结构
查看>>
在隐私的博弈时代,BCH为你保驾护航
查看>>
vue升级之路(三)-- vue-router的使用
查看>>
【 karle 专栏 】Android 初探底层知识系列
查看>>
峰采 #2
查看>>
PAT A1048
查看>>