Python 最大字符串堆

2024-03-28 16:34:29 发布

您现在位置:Python中文网/ 问答频道 /正文

建议使用max堆的方法是将键与-1相乘。 建议的最大字符串堆的方法是什么?你知道吗

有没有其他的图书馆有这个功能?你知道吗


Tags: 方法字符串功能图书馆建议max
2条回答

通过使字符值为负来反转字符串?全小写字符串的示例键:

lambda s: ''.join(chr(ord('z') - ord(c) + ord('a')) for c in s)

您可以使用heapq从字符串构造maxheap来构建一个类似字符串的对象的minheap,这些对象的字符内容与原始字符串相同,但其比较运算符(以及它们的排序顺序)产生的结果与普通字符串对象相反。如果我们称这个对象为contra_string,那么它的定义如下:

class contra_string(str):

    def __init__(self, s):
       self.original = s

    def __lt__(self, s):
        return self.original.__gt__(s)

    def __le__(self, s):
        return self.original.__ge__(s)

    def __eq__(self, s):
        return self.original.__eq__(s)

    def __ne__(self, s):
        return self.original.__ne__(s)

    def __gt__(self, s):
        return self.original.__lt__(s)

    def __ge__(self, s):
        return self.original.__le__(s)

    def normal(self):
        return self.original

它的用法如下:

import heapq

mystrings = [ 'b', 'c', 'a', 'bravo', 'alpha', 'charlie' ]

maxheap = [contra_string(s) for s in mystrings]
heapq.heapify(maxheap)

print [heapq.heappop(maxheap) for n in range(len(maxheap))]
# prints "['charlie', 'c', 'bravo', 'b', 'alpha', 'a']"

请记住,堆中的对象是contra_string的实例,因此如果在从堆中弹出对象之后在比较中使用它们,它们的行为会很奇怪。如果在提取对象之后需要对这些对象执行任何涉及自然有序字符串比较的操作,那么可以使用contra_string上的normal方法恢复原始的普通字符串,当然,使用这些原始字符串的比较将正常进行。这看起来像:

original_strings_in_reverse_order = [heapq.heappop(maxheap).normal() for n in range(len(maxheap))]
print type(original_strings_in_reverse_order[0])
# prints "<type 'str'>"

相关问题 更多 >