所以我有一个列表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)
如您所见,我正在试图找到hex_row项,其中min_addr
字段等于n_Address
。如果没有相同的值,我希望得到最高的min_addr
值,这个值小于n_Address
。虽然上面的代码工作正常,但速度非常慢。我在某个地方读过关于分割的文章,但我不知道它是如何工作的。
发布于 2020-04-30 07:12:10
所以我想出了如何平分工作的方法:
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
对象的构造函数。
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)
https://stackoverflow.com/questions/61496680
复制相似问题