【发布时间】:2017-01-15 22:25:34
【问题描述】:
我想根据最后两列对元组列表进行排序:
mylist = [(33, 36, 84),
(34, 37, 656),
(23, 38, 42)]
我知道我可以这样做:
final = sorted(mylist, key:lambda x: [ x[1], x[2]])
现在我的问题是我想将列表的第二列与一个特殊条件进行比较:如果两个数字之间的差异小于偏移量,则它们应该被视为相等(36 == 37 == 38)并且第三列应用于对列表进行排序。我希望看到的最终结果是:
mylist = [(23, 38, 42)
(33, 36, 84),
(34, 37, 656)]
我正在考虑创建自己的整数类型并覆盖等号运算符。这可能吗?是不是矫枉过正?有没有更好的方法来解决这个问题?
【问题讨论】:
-
我不明白你所说的偏移量是什么意思。但是不要创建自己的类型,您可以使 lambda 函数更复杂。让它从将所有这些考虑在内的元组的最后两个数字中计算出一个数字。
-
偏移量是指一个小数字。例如如果 offset = 2 那么 (36 + offset) == 38
-
我会发布,但这会破坏传递性。在使用此比较时要小心。
-
如果你有 [(1,6), (2,5), (3,4), (4,3), (5,2), (6,1)] 会发生什么偏移量为 1?
-
但是例如第一项 (1,6) 不与项 (3,4) 的偏移量,所以 (1,6) 应该在 (3,4) 之前,因为我们正在按第一项排序。但是如果你取 1 == 2 == 3,那么它们应该按第二项排序,并且 (3,4) 应该在 (1,6) 之前。这是模棱两可的。你需要做出更精确的定义。
标签: python sorting tuples custom-function