问题描述
我正在尝试使用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)
可以告诉我我在这里想念的东西吗?
1楼
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
2楼
尝试:
min([val for val in z if val % 2 != 0])
3楼
看来您的代码逻辑是错误的。 首先,您似乎在return语句中出现了缩进错误。 第二,min()函数需要一个项目集合(例如,一个数组)或一系列参数来确定该系列中的最小值。 您可以尝试多种方法。
使用另一个变量存储临时最小值。 每次找到较小的奇数值时都将其替换(对于x中的每个i ...如果该值是奇数并且小于先前的奇数值,则将其替换),并以您可以找到的第一个奇数开头。
取所有奇数并将它们添加到将应用min函数的另一个数组。
希望这证明有用!
4楼
您可以将生成器传递给min()
函数:
def min_odd(iterable):
return min(i for i in iterable if i % 2)
我没有写i % 2 != 0
因为任何奇数都将返回1,其布尔值为True。
我向采用可迭代的函数添加了一个参数,以便可将其用于传入的任何可迭代。
5楼
min
进行迭代操作。
i
不是您代码中的迭代器;
这是列表的最后一个元素。
不过,您可以通过过滤器实现所需的目标:
min(filter(lambda e: e%2 != 0, x))