2016-02-17 98 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时,您正在为您的文件写入一个空列表。你反而想完全跳过这一行。 –

相关问题