每周完成一个 ARTS: Algorithm: 每周至少做一个 LeetCode 的算法题 Review: 阅读并点评至少一篇英文技术文章 Tips: 学习至少一个技术技巧 Share: 分享一篇有观点和思考的技术文章
283. Move Zeroes
难度:Easy
题意:给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]
说明:
解法:
本题的思路非常的直接,但也很巧妙。大体上是,使用两个指针,其中一个 i 指针遍历整个数组,碰到一个不是 0 的元素就将它赋予当前的 pos 指针,然后 pos 指针加一,当遍历完成之后,整个数组的前 pos 位就自然而然的是相对位置没有变化的元素了,再将数组的第 pos 位到最后全部置为 0 即可。
代码:
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
pos = 0
for i in range(len(nums)):
if nums[i]:
nums[pos] = nums[i]
pos += 1
for i in range(pos, len(nums)):
nums[i] = 0
What does it take to be an expert at Python
这周 review 的不是文章,是 YouTube 上 PyData 的一个视频,这个视频是 James Powell 在 2017 年 PyData Seattle 的 talk,讲述了他对如何成为 Python 高手的理解。视频比较长,有网友根据视频内容做了一个配套的 notebook,放到了这个 github 页面上。
James Powell 大致讲述了以下几个方面,以及如何使用这些 Python 的特性来方便日常的生活。
虽然 James Powell 的语速比较快,但是吐字清晰,配上现场敲出的代码,听明白他的意思并不难,但真正理解并应用他所说的,还有不少功课要做。建议反复观看,仔细理解。
B 站链接:这里。
一个 vim 配色神器
发现一个 all-in-one 的 vim 配色神器:https://github.com/flazz/vim-colorschemes。
使用 :colorscheme {colorschemename}
可以改变当前配色,若需要永久使用指定配色需要将其写入 vimrc 中。
Vim 中的「宏」(Macro)
不知道有没有人和我一样,第一眼看到「宏」这个词,就想起来小时候玩 Word 或者 Excel 的时候时不时蹦出来的「没有这个宏」之类的提示。。。
下面我们来说说「宏」。首先我们从一个问题入手。工作当中一个很典型的场景是,现在我们写了一个爬虫,将一堆网页的 url 爬取下来了,但是发现之后在使用这些 url 的时候,需要两边添加引号 '
。就比如下面这种,你会怎么做呢?
https://www.zhihu.com/question/332265335
https://www.zhihu.com/question/23392154
https://www.zhihu.com/question/345698784
https://www.zhihu.com/question/292450646
https://www.zhihu.com/question/20058733
https://www.zhihu.com/question/36671668
有的人可能会说,就这么点儿,我就手动加就行了。这种方式在行数比较少的时候绝对可行,但是经常我们需要处理上百行几千行的数据,这时候手动添加绝对是笨办法。
还有人可能会说,我写个脚本,读取每一行处理完之后再写回原文件也可以。实际上这样做是可行的,而且很多时候我们也会倾向使用这种方式。但在我们现在这种情况下,vim 提供了一个更为简便的处理方式,就是「宏」。
Vim 中所谓的「宏」,就是一系列操作的集合,可以将这些特定的操作记录下来,然后应用到其他文本处理中去。使用「宏」的方式如下:
q
开始录制宏,再按一次 q
结束录制q{register}
来指定寄存器@{register}
来回放指定寄存器中的宏比如针对上面的情况,我们可以首先按下 q
开始录制宏,再按下 a
表示将这个宏保存到名为 a 的寄存器中。再针对第一行,按下 I
(大写 i)表示在本行最前端插入,再按 '
插入引号,之后按 Esc
回到 normal 模式,按下 A
(大写 a)表示在本行末尾插入,再按 '
插入引号,之后按 Esc
回到 normal 模式。这样我们就完成了宏的录制。
之后我们使用 V
(大写的 v)选中需要更改的行,按下冒号 :
进入命令模式,这时候 vim 会默认有 '<'>
这样的命令,不用管它,在其之后输入 normal
表示我们这个宏是在 normal 模式下运行,再接着输入 @a
表示回放放在名称为 a 寄存器中的宏。这样我们就完成了宏的回放。所有 url 的两端也被添加上了引号。