<p>这是对您在自己的问题的答案中对<code>sort_keyratios()</code>所做的修改作出的回应。如果你发现其他有用的信息,你还有其他事情要投票。<;提示></p>
<p>总之,您可以更有效地完成正在做的事情,方法是构建一个字典,将每个<code>datacode</code>映射到一个<code>(row, col)</code>对,然后使用这个先前构建的表来查找函数中的值。为了方便起见,我添加了一个名为<code>create_datacode_map()</code>的新函数。在</p>
<p>以下是如何使用它:</p>
<pre><code>def create_datacode_map():
""" Create dictionary mapping datacodes to (row, col) in data. """
# define rows that have no useful data
skip_list = {16, 17, 18, 28, 29, 38, 39, 40, 41, 46, 51, 56, 61, 62, 63, 69,
70, 71, 92, 93, 98, 99, 100}
def find_row_col(datacode):
skipped = 0
# match datacode to row, column
for row in xrange(0, 109):
if row in skip_list:
skipped += 11
continue
for col in xrange(0, 12):
if datacode == col + (11*row) - skipped:
return row, col
# create and return the dictionary
return {datacode: find_row_col(datacode) for datacode in xrange(1, 910)}
def sort_keyratios(self, datacode):
# convert datacode to row, column and return data in that position of list
if not hasattr(self, 'datacode_map'):
self.datacode_map = create_datacode_map()
row, col = self.datacode_map[datacode] # lookup conversion
return self.data[row][col]
</code></pre>
<p>所示的<code>sort_keyratios()</code>版本在每次调用时都检查<code>self.datacode_map</code>是否存在,如果不存在,则创建它。如果已经在<code>fetch_keyratios(()</code>中完成了该操作,那么<code>sort_keyratios()</code>就可以假定它存在,而不必每次调用它时都进行检查。在</p>