Python-人类的数字,带有字母数字,但在pyQt和__lt__运算符中

Python-人类的数字,带有字母数字,但在pyQt和__lt__运算符中,第1张

Python-人类的数字,带有字母数字,但在pyQt和__lt__运算符中

这可能对您有帮助。编辑正则表达式以匹配您感兴趣的数字模式。Mine将把包含的所有数字字段都

.
视为浮点数。用于
swapcase()
颠倒您的情况,以便排
'A'
在后面
'a'

更新 :改进:

import redef _human_key(key):    parts = re.split('(d*.d+|d+)', key)    return tuple((e.swapcase() if i % 2 == 0 else float(e)) for i, e in enumerate(parts))nums = ['9', 'aB', '1a2', '11', 'ab', '10', '2', '100ab', 'AB', '10a',    '1', '1a', '100', '9.9', '3']nums.sort(key=_human_key)print 'n'.join(nums)

输出:

11a1a22399.91010a11100100ababaBAB

更新
:(响应评论)如果您有一个类

Foo
并且想要
__lt__
使用
_human_key
排序方案来实现,则只需返回
_human_key(k1) <_human_key(k2)
;的结果即可。

class Foo(object):    def __init__(self, key):        self.key = key    def __lt__(self, obj):        return _human_key(self.key) < _human_key(obj.key)>>> Foo('ab') < Foo('AB')True>>> Foo('AB') < Foo('AB')False

因此,对于您的情况,您将执行以下 *** 作:

def __lt__(self, other):    column = self.treeWidget().sortColumn()    k1 = self.text(column)    k2 = other.text(column)    return _human_key(k1) < _human_key(k2)

其他比较运算符(

__eq__
__gt__
等)将以相同的方式实现。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5646935.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存