2014-05-22 56 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