我正在尝试使用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)
能不能告诉我我在这里想念的东西。
答案 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()函数需要一个项目集合(例如,一个数组)或一系列参数来确定该系列中的最小值。您可以尝试多种方法。
使用另一个变量存储临时最小值。每次发现较小的奇数值时都将其替换(对于x中的每个i ...如果该值是奇数并且小于先前的奇数值,则将其替换),并以您可以找到的第一个奇数开头。 / p>
取所有奇数并将其添加到另一个将应用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))