Возврат / печать первого числа, которое должно быть больше 20, и последнего числа, которое должно быть больше 20 - PullRequest
1 голос
/ 17 октября 2019

У меня есть массив чисел, таких как '17 .2, 19.1, 20.4, 47.5, 34.2, 20.1, 19'

. Пытаюсь найти способ выбрать первое число, которое должно быть больше 20 (и ни одногоследующее) и последнее число должно быть больше 20, прежде чем упасть ниже.

До сих пор я пытался выбирать только числа от 20 до 23, но это не идеально (см. Код, например)

nums = [15, 16.2, 17.1, 19.7, 20.2, 21.3, 46.2, 33.7, 27.3, 21.2, 20.1, 19.6]
test_lst = [x for x in nums if x >=20 and x<=23]
print test_lst

Вывод, как и ожидалось, но я быхотел бы иметь только первый и последний номер, который сначала идет больше 20, без остальных. Я понимаю, что это, вероятно, тривиально для большинства, новичок в Python

Ответы [ 2 ]

7 голосов
/ 17 октября 2019

Вы можете проверить первое из выражения генератора, например,

>>> nums
[15, 16.2, 17.1, 19.7, 20.2, 21.3, 46.2, 33.7, 27.3, 21.2, 20.1, 19.6]
>>> next(x for x in nums if x > 20) # first one from front
20.2
>>> next(x for x in reversed(nums) if x > 20) # first one from rear
20.1
>>> 

Также, если вы не уверены, что искомый num не найден в итерируемом, вы можете вернуть default значение из next вместо того, чтобы оно поднялось StopIteration как,

Справка по встроенной функции, следующей во встроенных модулях:

next (...)

next(iterator[, default])

Return the next item from the iterator. If default is given and the iterator
is exhausted, it is returned instead of raising StopIteration.
>>> x
[1, 2, 3]
>>> next((x for x in x if x > 20), 0) # if no number > 20 is found, return 0
0
1 голос
/ 17 октября 2019
nums = [15, 16.2, 17.1, 19.7, 20.2, 21.3, 46.2, 33.7, 27.3, 21.2, 20.1, 19.6]

def first_over_20(nums):
    for num in nums:
        if num > 20:
            return num

def last_over_20(nums):
    for num in nums[::-1]:
        if num > 20:
            return num

print(first_over_20(nums))
print(last_over_20(nums))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...