首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python获得等于或小于x的最高值。

Python获得等于或小于x的最高值。
EN

Stack Overflow用户
提问于 2020-04-29 07:45:22
回答 1查看 50关注 0票数 0

所以我有一个列表hex_rows。此列表有数千个类型为HexRow的条目。

代码语言:javascript
运行
复制
class HexRow:
def __init__(self, byte_count, address, record_type, data, checksum):
    self.byte_count = byte_count
    self.min_addr = address
    self.record_type = record_type
    self.data = data
    self.checksum = checksum

我还有一本字典ex_obj.charics。这个有很多字段,但唯一相关的是n_Address

代码语言:javascript
运行
复制
ex_obj_hex_list = []
for ex_val in ex_obj.charics.values():
    templist = [t for t in hex_rows if t.min_addr <= ex_val.n_Address]
    tuple = (ex_val, templist[-1])
    ex_obj_hex_list.append(tuple)

如您所见,我正在试图找到hex_row项,其中min_addr字段等于n_Address。如果没有相同的值,我希望得到最高的min_addr值,这个值小于n_Address。虽然上面的代码工作正常,但速度非常慢。我在某个地方读过关于分割的文章,但我不知道它是如何工作的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-30 07:12:10

所以我想出了如何平分工作的方法:

代码语言:javascript
运行
复制
ex_val_hex_addr.append = []
for ex_val in ex_obj.charics.values():
    i = bisect_left(hex_rows, ex_val.n_Address)
    ex_val_hex_addr.append((ex_val, hex_rows[i - 1]))

我还需要调整HexRow对象的构造函数。

代码语言:javascript
运行
复制
class HexRow:
    def __init__(self, byte_count, address=None, record_type=None, data=None, checksum=None):
        if address is None:
            self.num_low_addr = byte_count
        else:
            self.byte_count = byte_count
            self.min_addr = address
            self.record_type = record_type
            self.data = data
            self.checksum = checksum

    def __lt__(self, other):
        return self.num_low_addr <= other

    def __repr__(self):
        return 'Foo({})'.format(self.num_low_addr)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61496680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档