2012-10-29 108 views
-1

可能重复:
check if all elements in a list are identical如何检查列表中的每个元素是否相等?

我要检查所有列表的元素是相等的。我不能这样做:

if all (x == x for x in (a, b, c, d)): 
    ... 

是否有非常简约和优雅的方式来在Python中做到这一点?

+6

http://stackoverflow.com/questions/3844801/check-if-all-elements-in-a-list-are-identical –

+1

你不只是比较每个元素在这里吗?一个元素何时不等于自身? –

+0

@FelixKling:'float('nan')' – Eric

回答

2

如果您的列表中只有可哈希元素,则可以使用set

例如,如果您的列表名为lst你可以这样做:

if (len(set(lst)) <= 1): 
    .... 

装置会消除你的列表中的所有副本,因此,如果集的长度为这意味着所有的元素是相同的。

+1

如果列表中的项目不可散列,这将失败。 –

+0

的确,我不知道为什么,但我认为他会比较数字,我会编辑答案。谢谢 –

0
first = my_list[0] 
print all(x==first for x in my_list[1:]) 

应该工作

更优雅,也许...(我真的不这么认为...)

>>> if reduce(lambda item0,item1:item0 if item0==item1 else False,my_list) is not False: 
... print "OK ALL THE SAME!" 
... 
OK ALL THE SAME! 
+0

你能解释一下这是如何工作的吗? –

+0

reduce将一个函数应用到列表中的每一对元素,直到只剩下一个标量值.. bah减少没有工作...生病看看我能否得到一个版本与减少工作 –

+0

失败'[False, False]' – Eric

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

这是你在找什么。

否则,您会比较每个值到自己x==x而不是每个值到第一个值。

-1

回答here,与业绩比较基准

我最喜欢的:lst[1:] == lst[:-1]

+0

然后请投票关闭/举报此问题为重复,并且不要复制答案。 –

相关问题