【问题标题】:Check if there are 2 or 3 elements with same value in a list/tuple/etc.检查列表/元组/等中是否有 2 或 3 个具有相同值的元素。
【发布时间】:2013-11-21 08:43:45
【问题描述】:

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

【问题讨论】:

    标签: python tuples iterable


    【解决方案1】:

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

    编辑:SQL != python,删除了“where”,对于更大的列表也会变慢,但对于 5 个元素就可以了。

    【讨论】:

    • where 不是 Python 关键字
    • 当你发表评论时我已经在编辑了,但是谢谢。
    • 好吧,如果您在结果列表中有 2 个项目,那么您可以同时拥有两个项目,然后是一个唯一项目。在这种情况下,我可能会建立一个计数字典,例如{i:myList.count(i) for i in set(myList)}
    【解决方案2】:

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

    您可以创建一个对象列表

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

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

    >>>if (len(set(l)) < len(l)):
        ...
    

    【讨论】:

      【解决方案3】:

      您可以使用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
      

      【讨论】:

        猜你喜欢
        • 2019-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-20
        • 1970-01-01
        • 1970-01-01
        • 2016-01-30
        • 1970-01-01
        相关资源
        最近更新 更多