2016-07-25 60 views
-1

說我有整數值數組作爲這樣的:如何打印未在數組中找到的值的範圍?

foo = [1, 5, 19, 27] 

現在說我生成值的列表0-29這樣:

bar = range(30) 

我想打印的值bar未打印foo中列出的值。

我將如何去在Python 2.7中做到這一點?

[編輯]

我想通了這個問題python - Removing duplicates in lists

事實證明,我的問題是一樣的「如何刪除列表中的重複」但我沒有當我問這個問題或者尋找類似於我的其他問題的時候,我會發現這一點。

要提出這個問題來休息,這裏的答案:

list(set(bar) - set(foo)) 

,打印的值,而無需打印FOO的值。

+0

我已經嘗試itertools.product,我已經嘗試嵌套for循環來獲得我正在尋找的東西。 itertools.product的問題是它會返回重複值,這可能會導致整數列表相當大的內存問題。 嵌套for循環的問題是解析整個相當大的整數列表需要很長的時間。 – KimChoJapFan

+0

嘗試**過濾器(函數,可迭代)** https://docs.python.org/2/library/functions.html –

+0

@KimChoJapFan您可以評論範圍的界限嗎? – Shubham

回答

0

很好,你找到了解決這個問題的方法。我想告訴你另一種實現這一點的方法,它可以在O(n)時間內工作,但爲此,範圍的最大尺寸必須近似爲<= 10^7

我們可以創建一個包含0的輔助數組。然後在foo的一次迭代中,我們可以在bar數組中標記(標記爲1)這個值是否打印。剩下的數組是填充0的答案。把它放在代碼中:

n = 30 
foo = [1, 5, 19, 27] 
bar = [0]*n 

for i in foo: 
    bar[i] = 1 

for i in xrange(n): 
    if bar[i] == 0: 
     print i