2016-02-17 138 views
0

我在這個論壇中發現了一些解決方案,但他們不像我所希望的那樣工作。以下的輸入數據被用來:確定一個列表是否包含獨特元素

ALY1 ATH BOL BRA
ALY2 ATH BOL BRA
ALY3 ATH BOL BRA
ALY4 ATH BOL BRA
ALY5 BOL BOL BRA
ALY6 ATH BOL BRA BOL

我只想保留行1,2,3和4.但不是5和6,因爲這裏出現重複。下面是我用:

f_groups = open(args[1], "r") 
f_idl_group = open(args[2], "w") 
def allUnique(x): 
    seen = set() 
    return not any(i in seen or seen.add(i) for i in x) 

for line in f_groups : 
    line_elements = line.split() 
    identifyers = line_elements[0:] 
    if allUnique(identifyers) : 
     print("all is well" + identifyers[0]) 
     #write to file 

使用腳本上面,所有的線路經過,但使用:

if not allUnique(identifyers) : 

那麼只有線5和6通。 後者是我所期望的,但我想要的是相反的,只能通過第1,2,3,4行。哪一個失敗。 任何幫助表示讚賞。 謝謝。

+3

查看列表是否包含所有唯一元素的最簡單方法是使用len(x)== len(set(x))'。 'set'將刪除所有重複項,然後查看元素數是否改變。 –

回答

4

試試這個:

def allUnique(x): 
    return len(x) == len(set(x)) 

這將返回True如果列表x所有元素都是唯一的,否則Falseset(x)x的一組元素,刪除了任何重複項。如果它具有與x相同的元素數量,那麼沒有重複。否則有。

+0

我試過了,但仍然全部6條線都通過了,但是排空了最後兩組。如果我將結果寫入文件,那麼這是我得到的: ['ALY1','ATH','BOL','BRA'] ['ALY2','ATH','BOL','BRA'] ['ALY3','ATH','BOL','BRA'] ['ALY4','ATH','BOL','BRA'] [] []。 使用如果不是全部唯一,那麼我得到最後兩行。 – geshtin

+0

這沒有意義。如果您發佈了您使用的代碼,我可以告訴您發生了什麼問題,但顯然不是這個功能。您發佈的代碼僅打印「一切都很好」以及列表的第一個元素,因此它不可能按照您在此聲明的內容進行操作。 –

+0

在沒有看到您的代碼的情況下,我可以建議的是,當allUnique'返回False時,您正在爲您的文件寫入一個空列表。你反而想完全跳過這一行。 –

相關問題