魔力Python——fileinput & bisect模块

fileinput

  起因:小伙伴Q我问,如何用python在一个txt每行末尾添加内容?

  我想了下,这不简单么,直接for循环读取每行再在末尾加新内容,然后重新写入新文档不就解决了么。想着这肯定不是小伙伴希望的,能不能直接在原文档添加,不写入新文档呢?

  这就了解到了fileinput模块,那么它能帮我干什么嘞!如:有一个test.txt,里面的内容如下:
|1|a|
|2|b|
|3|c|
  那么,执行下面的代码,就能在test.txt文档每行末尾添加‘aaa’

1
2
3
import fileinput
for line in fileinput.input('test.txt', inplace=1):
print('{0}\t{1}'.format(line.rstrip('\n'), 'aaa'))

bisect

  这是Lab小伙伴推荐的python排序模块,点学习模块具体内容。

  在LeetCode刷到Reverse Pairs这题时,我灵机一动,想到了用这个小模块非常简洁的写出了代码,虽然时间复杂度比用归并排序高,但不失为一种方法。

  题目大意:给定数组nums,定义所有满足i < j 并且nums[i] > 2 * nums[j]的数对(i, j)为“重要的逆序对”(important reverse pair),返回其个数。

  下面是我用bisect写的代码:

1
2
3
4
5
6
7
8
9
import bisect
class Solution3(object):
def reversePairs( self,nums):
count = 0
done = []
for num in nums:
count += len(done) - bisect.bisect(done, num * 2)
bisect.insort(done, num)
return count

  归并排序的解参见我的github

Talk is cheap. Show me the code.
分享