当前位置: 代码迷 >> python >> 如何使用列表中的函数获取最小奇数
  详细解决方案

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

热度:73   发布时间:2023-06-19 09:25:24.0

我正在尝试使用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)

可以告诉我我在这里想念的东西吗?

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

尝试:

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

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

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

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

希望这证明有用!

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

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

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

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

min进行迭代操作。 i不是您代码中的迭代器; 这是列表的最后一个元素。

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

min(filter(lambda e: e%2 != 0, x))
  相关解决方案