【问题标题】:skipping part of a loop跳过循环的一部分
【发布时间】:2021-09-01 07:24:10
【问题描述】:

我正在尝试通过检查列表计数中的每个数字来创建一个仅返回列表中唯一数字的函数。 但即使它已经知道数字计数大于 1,它也会一遍又一遍地检查该数字,这当然会在检查大列表时引起问题,我希望它停止检查一个数字的计数,如果它已经查过了,但我找不到任何方法。

这是我的代码:

def find_uniq(arr):
    for i in arr:
        if arr.count(i) == 1:
            return i

【问题讨论】:

  • “我正在尝试通过检查列表计数中的每个数字来创建一个仅返回列表中唯一数字的函数”我不明白这是什么意思。你能举一些例子来说明你是如何调用这个函数的吗?每种情况下的结果应该是什么?
  • 好吧,存储c[i] = arr.count(i),然后检查计数是否已知......?
  • 另外:你知道什么是直方图吗?如果您使用这个词,它是否有助于您在 Internet 上搜索解决方案?
  • @KarlKnechtel list1 = [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,1, 1, 1, 1] print(find_uniq(list1)) 然后它将打印 0,因为它是唯一没有任何重复的数字

标签: python python-3.x list for-loop


【解决方案1】:

使用计数器 它会创建字典:

例如:

from collections import Counter

之后,获取字典值为1的列表元素

lst =[k for k,v in mydict.items() if v == 1]

【讨论】:

    【解决方案2】:

    使用set 并检查唯一值的计数。 来自doc

    Sets :Python 还包括用于集合的数据类型。集合是没有重复元素的无序集合。

    如下:

    def find_uniq(arr):
        ret_arr = []
        for i in set(arr):
            if arr.count(i) == 1:
                ret_arr.append(i)
        return ret_arr
    

    【讨论】:

      【解决方案3】:
          def find_uniq(arr):
              
              uniqueList = list(set(arr))  # This list contains unique elements in the list "arr".
      
              return uniqueList
      

      通过这种方式,您可以轻松找到独特的元素。事实上,

          def find_uniq(arr):
      
              return list(set(arr))
      

      这个函数也是做同样的事情,但第一个代码很容易理解。

      【讨论】:

        【解决方案4】:

        你可以把它转换成集合,它只会包含独特的元素。

        arr = list(set(arr))
        

        【讨论】:

        • 这不会告诉你原始列表中哪个元素是唯一的……
        【解决方案5】:

        您可以使用字典来存储数组中每个元素的计数。此处的文档中提供了有关字典的更多信息:https://docs.python.org/3/tutorial/datastructures.html#dictionaries

        def find_uniq(arr):
            count = {}
            for i in arr:
                if i in count:
                    count[i] += 1
                else:
                    count[i] = 1
            return count
        

        返回的字典给出数组中每个元素的计数。要找出哪个元素出现了一次,只需将 count[elem] 与 1 进行比较即可。

        这也更有效,因为字典是一个“查找”表,其元素可以在 O(1) 时间内访问。 arr.count 函数是 O(n),因为它需要检查整个数组来计算元素在其中的次数。

        【讨论】:

          【解决方案6】:

          如果您需要查找仅出现一次的第一个数字,则此方法应该有效。 tempSet 在这里将数组缩小到尽可能小的方式。

          def find_uniq(arr):
          
              tempSet = list(set(arr))
          
              for i in tempSet:
                  if arr.count(i) == 1:
                      return i
          

          【讨论】:

            【解决方案7】:

            我认为完成您所要求的最简单的方法之一是创建一个临时列表来存储您已经检查过的号码,然后检查您是否已经检查过该号码。

            def find_uniq(arr):
                checked_nums = []  #list of all checked numbers
                for i in arr:
                    if i not in checked_nums:  #if the number hasn't been checked yet:
                        if arr.count(i) == 1:
                            return i
                        checked_nums.append(i)  #add the number to the checked numbers list
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-03-26
              • 2021-04-08
              • 1970-01-01
              • 2013-01-11
              • 2017-05-09
              • 1970-01-01
              • 1970-01-01
              • 2010-12-31
              相关资源
              最近更新 更多