繁体   English   中英

Python 获得等于或小于 x 的最大值

[英]Python get highest value that is equal to or less than x

所以我有这个列表hex_rows 该列表有数千个HexRow类型的条目。

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

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)

如您所见,我试图找到min_addr字段等于n_Address的 hex_row 项目。 如果没有相等的值,我想获得小于n_Address的最高min_addr值。 虽然上面的代码可以工作,但速度很慢。 我在某处读到了 bisect,但我不知道它是如何工作的

所以我想出了如何让 Bisect 工作:

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 object 调整我的构造函数

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM