今天接触到了一个挺有意思的概念:牛津逗号。

所谓牛津逗号(Oxford Comma),当然和牛津大学有点关系。牛津逗号,指的是用英文枚举一些示例的时候,紧跟在并列连词(通常是 and 和 or)之前的那个逗号。举个栗子:

Mary likes apple, banana, and strawberry.

这个例子里面,and 之前的逗号,就是所谓的牛津逗号。叫它牛津逗号,是因为牛津大学出版社要求作者必须在枚举的并列连词之前加上一个逗号。不过,由于哈佛大学出版社也有这么一个要求,所以这种逗号也可以称为哈佛逗号(Harvard Comma)。当然,你也可以根据它所处的环境,把它叫做 Serial Comma。

阅读全文 »

2013 年我接触 Python 的时候,就听闻 Python 的网络编程能力十分强大。因此,在熟悉 Python 的基本语法之后,我就和几个小伙伴一起合作,试着用 Python 的 urlliburllib2 库构建了一个百度贴吧 Python 客户端。

然而,使用的过程中,我发现两个标准库的语法并不自然,甚至可以说十分反人类——用着很难受。又有,我平时使用 Python 甚少涉及到网络编程的内容。因此,Python 的网络编程就被我放下了,直到我认识了 requests 库。

阅读全文 »

排列组合是高中数学中比较难的部分。用我高中数学老师的话说,叫做「会者不难,难者不会」,说是排列组合基本靠悟。

高中数学中,排列组合相关的题目,重点是求在某个场景下,排列/组合的可能数是多少,并不要求学生列出这些可能的排列/组合分别是什么。在实际工程应用中,有些场景却会有这样的需求。

在 Python 中,标准库 itertools 提供了排列、组合、笛卡尔积的方法。然而在 C++ 中,标准库只提供了 next_permutationprev_permutation,通常来说不太够用。

这里,我们给出两种思路的算法。

阅读全文 »