Возврат первого номера списка - PullRequest
0 голосов
/ 13 октября 2018

Итак, я пытаюсь создать скрипт, в котором возвращается первый четный номер определенного списка.Если в списке нет четных чисел, он возвращает -1.

Сначала я пытался использовать str.find(), но я просто не знаю, как заставить его работать.Любая помощь?

from typing import List

def f_even(items: List[int]) -> int:
"""
>>>f_even([1, 3, 4, 6])
4
>>>f_even([1, 3])
-1
"""
even_numbers = []
even = even_numbers[0]

for number in items:   
    if number % 2 == 0:
        even_numbers.append(number)                
return even    

Прямо сейчас я получаю сообщение об ошибке, где even = even_numbers [0];индекс находится вне диапазона.Я чувствую, что сильно усложняю этот код.

Ответы [ 4 ]

0 голосов
/ 13 октября 2018
a = [1,2,3,4]
b = [1,3,5,7]

def even(x):
  for a in x:
    if a%2==0:
      f = 0
      break
  else:
    f = -1

  return f

print(a,even(a))
print(b,even(b))

OP:

([1, 2, 3, 4], 0)
([1, 3, 5, 7], -1)
0 голосов
/ 13 октября 2018

Используйте next() в генераторе и верните -1 для нечетного случая.

lst = [1, 3, 4, 6]
print(next((x for x in lst if x % 2 == 0), -1))
# 4

В особом случае ( без четных ):

lst = [1, 3, 3, 9]
print(next((x for x in lst if x % 2 == 0), -1))
# -1
0 голосов
/ 13 октября 2018

Вы можете использовать блок if/else, прежде чем пытаться вызвать even[0], если ваш even имеет значения, вы можете позвонить even[0], иначе return / print -1

even = []
for number in items:
    if not number % 2:
        even.append(number)
if even:
    print(even[0])
else:
    print(-1)
0 голосов
/ 13 октября 2018

Это потому, что сразу после создания even_numbers список пуст, и even = even_numbers[0] пытается получить его первый элемент, которого там нет.

Вы можете назначить -1 для even, а затем обновите его в цикле.Если в цикле нет четного числа, оно все равно будет равно -1, поэтому метод вернет -1.

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