Удалите четное / нечетное число из нечетного / четного списка Python.

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

Задача заключалась в следующем:

  1. Учитывая список четных чисел и один нечетный, верните нечетные
  2. Учитывая список нечетных чисел и один четный, верните четный

Мое (неэлегантное) решение этого было:

def find_outlier(integers): o = [] e = [] for i in integers: if i % 2 == 0: e.append(i) else: o.append(i) # use sums to return int type if len(o) == 1: return sum(o) else: return sum(e) 

Это хорошо работает, но кажется довольно грубой силой. Я ошибаюсь, думая, что запуск (большинство) функций с помощью списков заполнителей, таких как o и e , довольно «нубоподобный»?

Я хотел бы лучше понять, почему это решение работает для нечетного списка, но не работает в четном списке, чтобы лучше понять понимание списка:

 def find_outlier(integers): if [x for x in integers if x % 2 == 0]: return [x for x in integers if x % 2 == 0] elif [x for x in integers if x % 2 != 0]: return [x for x in integers if x % 2 != 0] else: print "wtf!" o = [1,3,4,5] e = [2,4,6,7] In[1]: find_outlier(o) Out[1]: [4] In[2]: find_outlier(e) Out[2]: [2, 4, 6] 

Where Out[2] должен возвращаться 7 .

Заранее благодарим за любые идеи.

3 Solutions collect form web for “Удалите четное / нечетное число из нечетного / четного списка Python.”

Ваша попытка не срабатывает, потому что первая, if всегда будет правдой . У вас всегда будет список с по крайней мере 1 элементом; либо странный, либо нечетный, и вы проверили список со всеми четными числами, иначе у вас есть список с одним четным номером в нем. Только пустой список будет ложным.

Список понятий не лучшее решение здесь, нет. Попытайтесь решить его вместо этого с минимальным количеством проверенных элементов (первые 2 элемента, если они отличаются по типу, получают третий, чтобы сломать галстук, в противном случае повторите попытку, пока не найдете ту, которая не соответствует хвосту):

 def find_outlier(iterable): it = iter(iterable) first = next(it) second = next(it) parity = first % 2 if second % 2 != parity: # odd one out is first or second, 3rd will tell which return first if next(it) % 2 != parity else second else: # the odd one out is later on; iterate until we find the exception return next(i for i in it if i % 2 != parity) 

Вышеописанное StopIteration исключение StopIteration если на StopIteration есть либо менее 3 элементов, либо не существует никакого исключения. Он также не будет обрабатывать случай, когда существует более одного исключения (например, 2, за которым следует 2 нечетных, в этом случае будет возвращено первое нечетное значение).

Каковы недостатки этого ответа (который находится на вершине стека решений по этой конкретной проблеме )?

 def find_outlier(int): odds = [x for x in int if x%2!=0] evens= [x for x in int if x%2==0] return odds[0] if len(odds)<len(evens) else evens[0] 

Самый эффективный ответ будет немного уродлив.

 def f(in_list): g = (i for i in in_list) first = next(g) second = next(g) #The problem as described doesn't make sense for fewer than 3 elements. Let them handle the exceptions. if first%2 == second%2: a = first%2 for el in g: if el%2 != a: return el else: third = next(g) if third%2 == first%2: return second else: return first except ValueError('Got a bad list, all evens or all odds') 
  • Попытка понимания списка Python с двумя переменными разных диапазонов
  • Есть ли лучший способ конвертировать список в словарь в Python с ключами, но нет значений?
  • Учет списка, проверьте, уникален ли элемент
  • Pythonic способ распечатать элементы списка
  • Как удалить смежные повторяющиеся элементы в списке, используя списки?
  • Значения Python для нескольких списков в одном понимании списка
  • Вложенный список для dict
  • Почему понимание списка намного быстрее, чем numpy для умножения массивов?
  •  
    Interesting Posts for Van-Lav

    Разделить текст на предложения

    Игнорировать дело с difflib.get_close_matches ()

    Всегда ли быстрее использовать строку в качестве ключа в dict?

    Скрипты в пакете python

    Python: threading + lock значительно замедляет мое приложение

    внедрение argmax в Python

    django allauth социальная аутентификация, полученная по электронной почте, соответствует существующей электронной почте пользователя?

    python говорит, что «нет модуля с именем nest», когда он находится в $ PATH

    к какой группе относится обратная ссылка, когда используется операция sub ()?

    Настройка Qtconsole IPython с помощью PyQt5

    Mercurial Hook – изменить сообщение фиксации фиксации

    Функция Python maketrans () не работает, потому что аргументы различной длины, когда они на самом деле являются

    python: создание гистограммы из словаря

    Функция декодирования пытается кодировать Python

    Как должен быть извлечен определенный процент равномерно распределенных элементов списка Python?

    Python - лучший язык программирования в мире.