【问题标题】:How to find the majority integer that is divisible by the integer 10?如何找到能被整数 10 整除的多数整数?
【发布时间】:2019-04-24 06:26:31
【问题描述】:

我正在编写一个函数“most_of”,它接受一个数字列表作为参数。该函数的目标是获取列表,对其进行迭代并找出列表中的大多数整数是否可以被 10 整除。

例如,如果我传递了参数:

[1,10,10,50,5]

输出将是:

True

因为 3/5 的整数可以被 10 整除。但是,如果我通过了:

 [1,2,55,77,6]

输出将是:

 False

因为列表整数中有 4/5 不能被 10 整除。

这是我尝试过的:

def most_of(lst):
    for i in lst:
        if lst[i] % 10 == 0:
           lst == True
        else:
           lst == False

我基本上被困在这一点上,因为这不会检查大多数数字是否能被 10 整除,它只是除以。

感谢您的帮助!

【问题讨论】:

  • == 用于检查事物是否相等,而不是用于分配值。但是,无论如何您都不想重新分配 lst 变量。您需要计算有多少项目可以被 10 整除,然后返回 TrueFalse,具体取决于哪个更大。

标签: python list loops


【解决方案1】:

该函数的目标是获取列表,对其进行迭代并 找出大多数列表整数是否能被 10 整除。

您的列表将包含两种整数:可被 10 整除的整数和不可被 10 整除的整数。您需要找到两个类别中的整数个数,比较这些数字并相应地返回 True 或 False。因此,您的函数将如下所示:

def most_of(lst):
    divisible_counter = 0
    non_divisible_counter = 0
    for element in lst:
        if element % 10 == 0:
            divisible_counter +=1
        else:
            non_divisible_counter += 1
    if divisible_counter > non_divisible_counter:
        return True
    else:
        return False

当然,以上所有代码都可以减少很多。但我想展示一种对 Python 初学者来说更容易理解的算法。

【讨论】:

    【解决方案2】:

    你在测试你的第一个数字后为你的列表分配一个布尔值,但是你必须计算所有可以除以十而没有休息的数字和所有其他数字,然后比较这个计数器:

    def most_of(lst):
        divideByTen = 0
        otherNumbers = 0
        for i in lst:
            if i % 10 == 0:
               divideByTen+=1
            else:
               otherNumbers+=1
        if(divideByTen > otherNumbers):
            return True
        else:
            return False
    
    
    a = [1,10,10,50,5]
    b = [1,2,55,77,6]
    
    print(most_of(a))
    print(most_of(b))
    

    【讨论】:

    • 这在优雅方面是次要的,而且看起来不像是惯用的 Python(如果表达式不需要括号,奇怪的空格省略......)。
    【解决方案3】:

    奥斯卡对答案的轻微修改:

    def most_of(lst):
        return sum(1 if n % 10 == 0 else -1 for n in lst) >= 0
    

    当然结果相同

    lst1 = [1,10,10,50,5]
    lst2 = [1,2,55,77,6]
    
    print(most_of(lst1))  # True
    print(most_of(lst2))  # False
    

    【讨论】:

      【解决方案4】:

      计算有多少整数可以被 10 整除,并测试该数字是否为“多数”——也就是说,它是否大于或等于列表长度的一半。像这样:

      def most_of(lst):
          num = sum(1 for n in lst if n % 10 == 0)
          return num >= len(lst) / 2.0
      

      例如:

      >>> most_of([1,10,10,50,5])
      True
      >>> most_of([1,2,55,77,6])
      False
      

      【讨论】:

      • 可能更好:sum(not n % 10 for n in lst),因为0 是 Falsy 而boolint 的子类。
      • answer 的影响,我将用num = len(list(filter(lambda x: x%10 ==0, lst))) 替换中间行。如果您只是对元素的数量感兴趣,那么总结一些东西有点笨拙。对于巨大的列表,内存效率可能会成为一个问题,但我们应该比输入列表大小低十倍。
      • @guidot 但根据您的建议,我们将创建一个临时列表,从内存消耗的角度来看,情况更糟。
      • @ÓscarLópez 我已经承认内存效率较低(这不太可能对合理大小的列表造成严重问题),但越来越欢迎纯代码并且问题没有提及 sum 任何地方。
      • @guidot 并不笨拙,它是 idiomatic way 来计算 Python 中满足条件的项目。在老式循环中,我们会在某处有类似count++; 的语句。在这里,我们也在做同样的事情,而且效率很高 - 我们一次处理一个项目,并为每个满足条件的项目继续添加1
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-26
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      相关资源
      最近更新 更多