代码之家  ›  专栏  ›  技术社区  ›  rotwar

如何利用列表函数求最小奇数

  •  1
  • rotwar  · 技术社区  · 6 年前

    我正在尝试使用python获得最小奇数。我使用lambda、循环和其他方法来获得最小奇数,但我无法使用函数来获得它。这是我的密码

    z= [1,8,-4,-9]
    
    def min_odd(x):
        for i in x:
            if (i%2!=0):
        return min(i)
    
    y = min_odd(z)
    print (y)
    

    5 回复  |  直到 6 年前
        1
  •  4
  •   Joe Iddon    6 年前

    这个 min() 函数需要一个类似于列表的iterable,然后它将从中产生最小的元素。

    例如。 min([1,0,3]) 给予 0

    因此,如果要使用它,必须创建一个奇数列表(或其他iterable),然后将其传递给它:

    def min_odd(x):
        odds = []
        for i in x:
            if i % 2 != 0:
                odds.append(i)
        return min(odds)
    

    def min_odd(x):
        return min([i for i in x if i % 2 != 0])
    


    另一种方法是将当前最小奇数值存储在变量中,如果遇到较小的奇数值,则更新此变量:

    def min_odd(x):
       min_v = float('inf')
       for i in x:
          if i % 2 != 0 and i < min_v:
             min_v = i
       return min_v
    
        2
  •  3
  •   msi_gerva    6 年前

    尝试:

    min([val for val in z if val % 2 != 0])

        3
  •  3
  •   vladvlad23    6 年前

    看来你的代码逻辑错了。首先,在return语句中似乎有一个缩进错误。其次,min()函数需要一组项(例如数组)或一系列参数来确定序列中的最小值。你可以尝试多种方法。

    1. 使用另一个变量存储临时最小值。每当你发现一个较小的奇数值(对于x中的每一个i。。。如果该值是奇数且小于上一个奇数,请将其替换)并从可以找到的第一个奇数开始。

    希望这证明是有用的!

        4
  •  2
  •   N Chauhan Nathan Hinchey    6 年前

    你可以把发电机送入 min() 功能:

    def min_odd(iterable):
        return min(i for i in iterable if i % 2)
    

    我没有写信 i % 2 != 0

    我在函数中添加了一个参数,该参数接受iterable,因此它可以用于传入的任何iterable。

        5
  •  1
  •   erip Jigar Trivedi    6 年前

    min i 不是代码中的iterable;它是列表的最后一个元素。

    min(filter(lambda e: e%2 != 0, x))