我有一个5元素的列表,我想知道是否有2个或3个相等的元素(或两个相等和三个相等)。这个“检查”将是if条件的一部分。让我说我懒得或傻写:
if (a==b and c==d and c==e) or .......... or .........
我知道它可能是这样写的,但不完全是这样的:
if (a==b and (c==b and (c==e or ....
我该怎么办?我也知道你可以写一些类似的东西:
if (x,y for x in [5element list] for y in [5element list] x==y, x not y:
答案 0 :(得分:1)
使用count
。你只想要[i for i in myList if myList.count(i) > 1]
。这个列表包含重复的元素,如果它是非空的,你有重复的元素。
编辑:SQL!= python,删除'where',这对于更大的列表来说也会变慢,但对于5个元素,它会没问题。
答案 1 :(得分:1)
如果您只想检查多个出现且对象属于可散列类型,则以下解决方案可能适合您。
您可以创建对象列表
>>>l = [a, b, c, d, e]
然后,您可以从同一列表创建一个集合,并比较列表的长度和集合的长度。如果集合的元素少于列表,则您知道必须有多个出现。
>>>if (len(set(l)) < len(l)):
...
答案 2 :(得分:0)
您可以使用collections.Counter
来计算列表中每个元素的出现次数。
计算完成后,只需检查计数中是否存在所需的值(2或3)。
from collections import Counter
my_data = ['a', 'b', 'a', 'c', 'd']
c=Counter(my_data)
counts = set(c.values())
print 2 in counts or 3 in counts