Как я могу вернуть наибольшее число в отсортированном кортеже 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]
это работает, я прошу лучший способ сделать это, мне не нравится использование z. В любом случае, спасибо
Итак, можете ли вы объяснить, какова цель этого кода — найти первую запись, которая больше width // height
?
Зачем тебе z
? Вы можете просто вернуть i
, когда оно больше ширины//высоты. Что должно происходить, когда такого i
нет?
да, но мне нужно вернуть предыдущий
Вместо этого вы могли бы использовать что-то вроде этого, вы не избавились бы от 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
Лучше звонить z
prev
или что-то в этом роде
Если вы измените порядок чисел, вы можете просто вернуть первое совпадение:
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)
Это хорошо, особенно по умолчанию None
Вы можете сделать это
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 в перевернутый список как последний элемент.
Не уверен, что вы пытаетесь сделать и что не работает в вашем коде