如何使用列表中的函数获取最小奇数

时间:2018-09-15 20:14:56

标签: python python-3.x

我正在尝试使用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 个答案:

答案 0 :(得分:4)

min()函数期望像列表这样的可迭代对象,然后它将从中产生最小的元素。

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

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

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

答案 1 :(得分:3)

尝试:

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

答案 2 :(得分:3)

看来您的代码逻辑是错误的。首先,您似乎在return语句中出现了缩进错误。第二,min()函数需要一个项目集合(例如,一个数组)或一系列参数来确定该系列中的最小值。您可以尝试多种方法。

  1. 使用另一个变量存储临时最小值。每次发现较小的奇数值时都将其替换(对于x中的每个i ...如果该值是奇数并且小于先前的奇数值,则将其替换),并以您可以找到的第一个奇数开头。 / p>

  2. 取所有奇数并将其添加到另一个将应用min函数的数组。

希望这很有用!

答案 3 :(得分:2)

您可以将生成器传递给min()函数:

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

我没有写i % 2 != 0是因为任何奇数都将返回1,其布尔值为True。

我向采用可迭代的函数添加了一个参数,以便可将其用于任何传入的可迭代。

答案 4 :(得分:1)

min对可迭代对象进行操作。 i在您的代码中不是可重复的;这是列表的最后一个元素。

不过,您可以通过过滤器实现所需的目标

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