[英]How can I return the last element number from a tuple that satisfies a condition?
如何返回排序元組中an
最大數字,但仍小於給定數字(比率)?
這是我的代碼:
def returnPrevious(width, height):
an = (2,3,4,6,8,9,12)
z = -1
for i in an:
if (width//height) >= i:
z += 1
else: break
return an[z]
如果您顛倒數字的順序,那么您可以只返回第一個匹配項:
def returnPrevious(width, height):
an = (12,9,8,6,4,3,2)
for i in an:
if width//height >= i:
return i
return None
您甚至可以使用next()
在單個語句中執行此操作,它從可迭代對象中返回第一個元素,或者如果可迭代對象為空,則返回我們選擇的默認值 ( None
)。
def returnPrevious(width, height):
return next((i for i in (12,9,8,6,4,3,2) if width//height >= i), None)
你可以改用這樣的東西,你不會擺脫 z,但它更干凈
def returnPrevius(width, height):
an = (2,3,4,6,8,9,12)
z = None
for i in an:
if (width//height) >= i:
z = i
else: break
return z
你可以這樣做
import itertools
def findLast(w,h):
r = w//h
return list(itertools.takewhile(lambda e: e < r, an))[-1]
或者
def findLast(w,h):
r = w//h
return [e for e in an if e < r][-1]
但它構建了一個列表,您不需要只從中獲取最后一個元素。
您可以做的是反轉列表並找到與您的條件匹配的第一個元素,然后您不需要記住前一個元素。 但是你仍然需要處理沒有這樣的元素的情況。 或者將 0 作為最后一個元素添加到反向列表中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.