0

我有一个 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: 
4

3 回答 3

1

使用count. 你只是想要[i for i in myList if myList.count(i) > 1]。此列表包含重复的元素,如果它不为空,则表示您有重复的元素。

编辑:SQL!= python,删除'where',对于更大的列表,这也会变慢,但对于5个元素它会很好。

于 2013-11-09T09:21:00.250 回答
1

如果您只想检查多次出现并且对象属于可散列类型,则以下解决方案可能适合您。

您可以创建一个对象列表

>>>l = [a, b, c, d, e]

然后,您可以从同一个列表创建一个集合,并比较列表的长度和集合的长度。如果集合的元素少于列表,则您知道必须多次出现。

>>>if (len(set(l)) < len(l)):
    ...
于 2013-11-09T09:25:52.770 回答
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
于 2013-11-09T19:04:58.263 回答