gpt4 book ai didi

Python 最大字符串堆

转载 作者:行者123 更新时间:2023-12-03 14:16:23 29 4
gpt4 key购买 nike

获得最大堆的建议方法是将键乘以 -1。
拥有最大字符串堆的建议方法是什么?

是否有具有该功能的替代库?

最佳答案

你可以使用 heapq 从你的字符串构造一个 maxheap构建一个类似字符串的对象的最小堆,其字符内容与原始字符串相同,但其比较运算符(以及它们的排序顺序)产生的结果与普通字符串对象相反。如果我们称该对象为 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 的实例。 ,所以如果在从堆中弹出它们后在比较中使用它们,它们的行为会很奇怪。如果您在提取这些对象后需要对它们进行自然排序的字符串比较,那么您可以使用 normal 恢复原始的普通字符串。 contra_string上的方法,当然,使用这些原始字符串的比较将表现正常。那看起来像:
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'>"

关于Python 最大字符串堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58714310/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com