Я пытаюсь найти и вернуть единственное четное целое в список нечетных целых чисел или единственное нечетное целое число в списке четных целых чисел. Однако мой код работает, если длина списка для нечетных целых чисел четна, он возвращает первое число в списке, а не четное целое. Любая помощь приветствуется. Код ниже:Поиск Отверстие четности в списке нечетных/четных целых чисел
even = [2, 4, 6, 8, 10, 12, 14, 2091] #2091 is the outlier and len(x) = 8
odd = [1, 3, 5, 7, 9, 11, 13, 4720] #4720 is the outlier and len(x) = 8
def find_outlier(x):
# Determine if list is even and length of list is odd
if sum(x) % 2 != 0 and len(x) % 2 != 0:
for x in x:
if x % 2 != 0:
return x
# Determine if list is even and length of list is even
elif sum(x) % 2 != 0 and len(x) % 2 == 0:
for x in x:
if x % 2 != 0:
return x
# Determine if list is odd and length of list is odd
elif sum(x) % 2 == 0 and len(x) % 2 != 0:
for x in x:
if x % 2 == 0:
return x
# Determine if list is odd and length of list is even (PROBLEM)
elif sum(x) % 2 == 0 and len(x) % 2 == 0:
for x in x:
if x % 2 == 0:
return x
print (find_outlier(even))
print (find_outlier(odd))
Ниже правильное решение проблемы переформатировать от решения Дмитрия:
def find_outlier(x):
odd = [i for i in x if i % 2 != 0]
even = [i for i in x if i % 2 == 0]
return odd[0] if len(odd) < len(even) else even[0]
'для й в x': Я никогда на самом деле пытался, но это кажется сложным: что' x' во время цикла: первоначальный список, или же он меняется на один номер? – Evert
Ваше решение не работает, если в списке имеется более одного выброса. Также нечетно использовать 'i% 2! = 0', так как это более явно указано как' i% 2'. Аналогично для следующего теста. См. Мой ответ для более краткого изложения. –