我必须找到所有列表元素是相等的。
我使用了以下代码:
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
答案 0 :(得分:1)
使用set过滤重复的id相同的元素,然后它的长度将小于原始列表
def all_unique(item):
return len(set(item)) == len(item)
>>> 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())