Удаление смежных дубликатов в списке (рекурсия) - как остановить функцию, если у меня есть уникальный список?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

1
задан Majo_Jose 14 April 2019 в 05:57
поделиться

2 ответа

Мы можем избежать булевых флагов и счетчиков, если тщательно настроим нашу рекурсию:

def removepairs(numbers):

    if not numbers:  # base case #1, empty
        return numbers

    first, *second_on = numbers

    if not second_on:  # base case #2, one element
        return numbers

    second, *third_on = second_on

    if first == second:
        return removepairs(third_on)

    result = [first] + removepairs(second_on)

    if result == numbers:
        return numbers  # base case #3, no change!

    return removepairs(result)

print(removepairs([1, 2, 3, 3, 2, 1, 5, 6, 7]))

ВЫХОД

> python3 test.py
[5, 6, 7]
> 
0
ответ дан cdlane 14 April 2019 в 05:57
поделиться

Если рекурсивная функция не является обязательной, ее можно просто выполнить с помощью следующего кода. Я прокомментировал заявление для печати. ​​

def removepair(input_list):
    unique_input_list = list(set(input_list))
    output_list = list(x for x in unique_input_list if input_list.count(x)%2 == 1)
    #print('Input List: ', input_list)
    #print('Output list: ', output_list)
    return output_list

Input List:  [1, 2, 3, 3, 2, 1, 5, 6, 7]
Output list:  [5, 6, 7]

Input List:  [4, 4, 4, 4, 4]
Output list:  [4]

Input List:  [1, 2, 3, 3, 2, 1]
Output list:  []
0
ответ дан Ora Aff 14 April 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: