[英]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.