【问题标题】:the number of occurrences of each value in the list is unique列表中每个值的出现次数是唯一的
【发布时间】:2020-10-11 15:00:28
【问题描述】:

如何在 python 中解决这个问题。 给定一个整数列表arr,编写一个返回true的函数当且仅当列表中每个值的出现次数在python中是唯一的

所以

a=[1, 2, 2, 3, 3, 3] 真

因为1的个数是1,所以2的个数是2,,,

a=[1, 2, 3, 3] 错误

因为1的个数是1,所以2的个数是1

【问题讨论】:

    标签: python list function


    【解决方案1】:
    def check_it(arr):
        occ = [arr.count(e) for e in set(arr)]
        return len(set(occ)) == len(occ)
    

    【讨论】:

    • 如果我对OP问题的理解是正确的,check_it([1, 2, 2, 3, 3, 3])不应该返回True吗?它返回 False
    • OP 说列表中每个元素的出现次数应该是唯一的。不是列表中的元素。
    • @AlbinPaul 我发现了错误并修复了它
    • @Unsigned_Arduino 我发现了错误并修复了它。你是对的,我误解了这个问题,你的例子现在应该返回 True。
    【解决方案2】:

    为了使列表的出现唯一,我们必须找到所有出现。为此,我们可以使用来自集合模块的计数器。 然后使用集合查找唯一元素并检查其大小。

    from collections import Counter
    ar  = [1,2]
    ar2 = [1,2,2,3,3,3]
    def is_unique(ar):
        occurence_list = Counter(ar).values()
        return len(occurence_list) == len(set(occurence_list))
    print(is_unique(ar))
    print(is_unique(ar2))
    

    输出

    False
    True
    

    【讨论】:

      【解决方案3】:

      问题是编写一个函数,如果列表中每个值的出现次数是唯一的,则返回 true。所以,例如

      a=[1, 2, 2, 3, 3, 3] 真的 1的个数是1,2的个数是2,,,

      a=[1, 2, 3, 3] 错误的 1的个数是1,2的个数是1

      【讨论】:

        【解决方案4】:

        天真的方法是将它们全部放在一个集合中,并依靠集合唯一性保证来完成工作。

        如果您的列表很大,那么即使前两个元素相同并且会导致测试失败,您也会复制所有内容。这是一个非常好的 Pythonic 解决方案。不错,moctarjallo。

        另一种方法是使用 set-hashed-lookup 功能提前退出。

        def all_unique(a):
            found = set()
            for item in a:
                if item in found:
                    return False
                found.add(item)
            return False
        

        【讨论】:

          【解决方案5】:

          假设你有这样的代码:

          arr = [1, 2, 3, 4, 5, 6, 7, 8, 9,]
          arr2 = [1, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9,]
          
          def contains_no_duplicates(arr):
              return len(arr) == len(set(arr))
          
          print(contains_no_duplicates(arr))
          print(contains_no_duplicates(arr2))
          

          有输出:

          True
          False
          

          获取列表的set 会删除重复项。发生这种情况是因为集合中的每个条目都必须是唯一的,就像 dict 不能有重复的键一样。

          【讨论】:

            【解决方案6】:

            在不同的帖子中看到: Checking if all elements in a list are unique

            def func(arr):
                 return len(arr) == len(set(arr)):
            

            【讨论】:

              猜你喜欢
              • 2011-05-12
              • 1970-01-01
              • 1970-01-01
              • 2018-11-17
              • 2021-07-25
              • 1970-01-01
              • 2020-10-07
              • 2012-10-25
              • 1970-01-01
              相关资源
              最近更新 更多