检查python列表中的所有元素是否不同

时间:2018-04-21 08:55:53

标签: python

我必须找到所有列表元素是相等的。

我使用了以下代码:

        all(x == list[0] for x in list)

现在我必须找到所有列表值都不同。请帮我解决这个问题。

     List = ['a', 'b', 'x', 'y']

     Expected Output: True

     List = ['a', 'a', 'x', 'y']

     Expected Output: False

     List = ['a', 'a', 'a', 'a']

     Expected Output: False

尝试下面的代码:

 list = ["aa", "bb", "bb"] 
 len(set(list)) != 1 
 output:
 will result True.
 I am expecting False, reason bb is same elements repeated 

2 个答案:

答案 0 :(得分:1)

使用set过滤重复的id相同的元素,然后它的长度将小于原始列表

def all_unique(item):
    return len(set(item)) == len(item)

OUT

>>> all_unique(['a', 'b', 'x', 'y'])
True
>>> all_unique(['a', 'a', 'x', 'y'])
False
>>> all_unique(['a', 'a', 'a', 'a'])
False
>>>

答案 1 :(得分:0)

在你的情况下你写了len(set(list)) != 1只有在列表中的所有元素都相同的情况下才有效,如果你有两个元素重复了数千次,那么它会将set的长度返回为2,因为它将有两个独特的元素

所以一种方法是用原始列表检查唯一元素的长度,如果它的相同则函数计算为True否则为假

def all_distinct(lis):
    return len(set(lis)) == len(lis)

set(lis) - 创建一组元素,其中所有元素都是唯一的(从不重复) len() - 返回作为参数传递的set或list或string的长度。

In [8]: all_distinct(['a', 'a'])
Out[8]: False

In [9]: all_distinct(['a', 'a', 'x'])
Out[9]: False

In [11]: all_distinct(['a', 'b', 'x'])
Out[11]: True

您也可以采用以下不同的方法(记录发生情况)

def get_occurrence(lis):
    td = {}
    for i in lis:
        td[i] = td.setdefault(i, 0) + 1
    return td

def all_distinct(lis):
    dict_ = get_occurrence(lis)  # this will return dict containing key as element and value of it's occurrence 
    return all(i==1 for i in dict_.values())