随机应变
python的习题我已经习惯了他们不给参考答案,又或者是参考答案里有一些超纲的东西。既然这样,如果我可以用我学过的东西得出答案,我会努力地那么干,但如果我实在没办法,就会请教搜索引擎,然后我也会用上一些超纲的函数解决问题。现在我只学到了一些很入门的东西,所以实际上现在很困扰我的问题实际上已经有现成的函数可以秒杀掉。秒杀是很简单的,你知道使用范围,然后把东西丢进去就可以了,但如果全部都这样拼凑,跟直接在Excel的系统函数里玩有什么区别呢。知其然,也要知其所以然。经常让我纠结的东西我会想到一些很特殊的情况,我该怎么把那些特殊情况也处理掉呢?当然我想到的特殊情况可能并不算太特殊,又或者还有很多特殊的东西我没有考虑到。内置的函数里,很多东西都固定了取值范围。比如说针对字符串的函数很多东西,你只能在里面填字符或字符串,你不能把列表、元组或者字典丢进去,所以这就很烦恼了,如果我要处理的不只是我能列举的那些字符呢?比如说我要处理的是32个半角的标点符号,我要把他们替换掉,它们32个是以一个字符串的形式放在一个函数里的,你可以直接的把它们引用出来,但是,如果你要把它们替换掉呢?我遇到的问题是,我需要把它们全部删掉。为了实现这个,我写了个循环,历遍了字符串里面的32个元素。然后把它们逐一替换为空字符串。后来我认识了一个比较高大上的函数,叫translate,而在translate之前,又有一个制定翻译规则的函数maketrans。Python3中,maketrans已经被列为内置函数,不需要再引入模块才能使用。Python3的maketrans有一个相当牛逼的功能,就是在创造翻译规则的时候,我可以引入字典。这是一个非常妙的点子!因为在创造翻译词对的时候,强制规定前者跟后者,必须是等长的,而字典的键与键值一定会成对出现。一开始我用那个函数的时候,被翻译的是32个字符,然后我手动数了32个空格进去。后来我为这32个字符建立了一个字典,然后优雅的把字典丢给了maketrans,最终让translate秒杀完事。
关于分隔出一段话里的每个单词这种事,正常人的思路是筛选出那些0-9以及大小写字母。但是,在一开始的时候,我被暗示要用减法。首先,把整段话都变成小写,然后剔除掉里面的标点符号。最终根据分隔符把单词切开。如果一开始,我就想到用限定字符的话,我会从正则方面考虑,但貌似我的做法跟正则出来的效果有点不一样。因为正则之下,居然星号、逗号和杠都没有去掉。这让我非常惊讶。当我对比我的方法提取出来的词和用正则方法提取出来的词以后,我发现在那个排版有点过分的emma文件里,我的提取效果要比网友的正则好。虽然总的来说两种方法算出来的单词量没插多少个,但实际上但把差异打印出来以后,效果还是差得挺远的。
我还是比较习惯自己先琢磨一下,得出自己的方法,然后再去跟别人比较。