本帖最后由 timespace 于 2014-01-24 21:11 编辑
回复 25# hothat007
1. 理解max(..., key)执行的逻辑。顺序迭代,元素a和b比较等价于key(a)和key(b)比较,最终迭代完成时返回一个最大值。等价于- def key(e):
- return e[2], e[0] # 返回的是一个tuple
复制代码 2. 理解tuple比较的逻辑。简单说就是当tuple第i个元素已经可以比较出大小时,就不会再去比较第i+1个元素。下面的例子就可以看出这个特性:- >>> max([(1, 1), (2, 2), (3, 2)], key=lambda e: e[1])
- (2, 2)
- >>> max([(1, 1), (2, 2), (3, 2)], key=lambda e: (e[1],e[0]))
- (3, 2)
- >>> max([(1, 1), (2, 2), (3, 2)], key=lambda e: (e[1],-e[0]))
- (2, 2)
- >>> max([(1, 1), (2, 2), (3, 2), (4, 0)], key=lambda e: (e[1],e[0]))
- (3, 2)
复制代码 3. 你的需求中,元素出现早晚可以用行序号表示,所以将e[0]作为比较参数,但它是次要关系。 |