在看《Text Processing in Python》时,看到有关Schwartzian Transform的概念。对于复杂的列表排序很有帮助。
Python的排序很多时候直接使用[ ].sort来实现。而已一般需要定义cmp(item1, item2)(比较)函数作为参数传递给sort。可以简单地如下示例:
def cmp(item1, item2): psss li =[] .... liSorted = li.sort(cmp)
但如果cmp教复杂,直接采用这种方式会效率会比较低。因为每次都需要调用付出的效率比较高。这样就产生了Schwartzian Transform的方式改进排序方法。从wikipedia上可以看出,这种方法属于perl的一个使用惯例。主要思想:
1.于预先计算出一个比较起来很容易的key,如整型。
2.把key和原有的item组合成新的list,这样就可以过滤掉每次需要多次计算的复杂性。
3. 直接对list排序,然后获取排列好的队列。
在Python中可以很方便地采用,比如我们要按照字符串的小写格式来排序:
tmp1 = [(x.upper(), x) for x in L] # Schwartzian transform tmp1.sort() sorted = [x[1] for x in tmp1]
python中还有不少比较tricky的使用惯例,需要慢慢积累才行。
归档在: 技术 — @
7:42 下午
No Comments Now!
Be the first to comment on this entry.