2014-05-22 36 views
-2
列表的间隔

所以我必须从一个文本文件中聚集了列表整数的间隔......Python的最快指数方式整数到整数

start = x """where 43189 < x < y < 4600941""" 
end = y 
list = [x,...,y] 

而且我通过的一列循环从另一个文件很多很多...整数

for line in open(file): 
    column = line.split() 
    print column[1] 

输出:

43189 
43190 
... 
4600941 

凡数字是有序的,但有一个未知上午空缺数量

在从列[1]收集的整数中索引列表开始的最快方法是什么?

间隔介于43189和4600941之间。 如果列中的起始值不均匀,则迭代比较列中的每个整数与区间中的起始值是非常耗时和浪费的(有很多间隙)

编辑:

我这样做很多的时间间隔,不只是一个,这样x和y是任意的,但它是已知43189 < X <Ÿ< 4600941,我的问题是X或Y或任何int之间可能不是我所比较的数字集合,那么添加迭代最简单的方法是什么如果在ints列中没有找到,则将间隔移到下一个int?

+1

为什么你必须将文件中的值与列表中的值(包含连续的数字)进行比较?为什么不简单地比较'x'和'y'? –

+1

你可以用'x'和'y'的实际值来编写例子吗? –

+0

你需要澄清你想要做的事情。我已经读过很多次了,我可以弄清楚的是,你正在读取文件中的数字;我不知道你想要什么输出。 –

回答

1

我不是100%肯定,如果这是你问什么,但我对你的问题的理解是,如果你犯了一个列表l,像这样:

with open(file) as f: 
    l = [line.split()[1] for line in f] # line.split()[1] == column[1] from your example 

你想知道什么指数在lx是。如果这是真的,你可以使用bisect模块来解决这个问题,因为它似乎l保证进行排序:

import bisect 

def index(a, x): 
    'Locate the leftmost value exactly equal to x' 
    i = bisect_left(a, x) 
    if i != len(a) and a[i] == x: 
     return i 
    raise ValueError 

你可以调用i = index(l, x)是内l发生x找到索引。如果x不在l中,则会提出ValueError。如果我误解了,请告诉我们,我们可以尝试调整以适应您的需求。

编辑:

再次,因为它不是很清楚你想要做什么,它可能是简单地阅读完所有的整数中file到字典将涉及您的需求:

with open(file) as f: 
    d = dict((line.split()[1], 1) for line in f) 

这会给你一个字典,其中的密钥都是file中的所有整数。然后,你可以说

if x in d: 
    # Do stuff 

要快速(O(1)平均)确定是否x存在于file