查找元素所属的范围

时间:2014-11-04 05:02:55

标签: python

我有2个文件。一个(让我们说文件F1)是一个cvs文件,有大约200K行和3列。每行表示一个间隔,行按递增顺序排列。例如:

1000,1340,yes
1400,1800,no
1810,2000,maybe
...

另一个文本文件(F2)有大约10K行,并且没有订购。我需要遍历F2并找到它所属的行,从该行获取第3个元素(是,否或可能)并将其附加到F2。例如,如果F2 = [1402,1100,1900],则更新的F2将是:

1402,no
1100,yes
1900,maybe

除了蛮力方法之外,还有更优雅的方式来接近这个吗?我想在F1中找到第一个元素大于或等于我们正在使用的F2中的元素,然后运行余数的搜索(或二元搜索)。任何提示都将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果F1中的总范围足够小,例如如果max(2nd column in F1) - min(1st column in F1)只有几百万个项目,那么您只需将所有内容存储在一个列表中:

class StringCache(dict):
    def __missing__(self, key):
        return key

f1_list = [None] * NUMBER_OF_ITEMS
string_cache = StringCache()

with open('F1.csv') as f1:
    for col1, col2, col3 in csv.reader(f1):
         for index in xrange(int(col1), int(col2) + 1):
              f1_list[index] = string_cache[col3]

with open('F2.csv') as f2:
    for (col,) in csv.reader(f2):
        print(f1_list[int(col)])

另请参阅https://stackoverflow.com/a/4544699/416224了解自动增长列表。