удалить отрицательный элемент из вложенного списка и возвести в квадрат список без использования цикла - PullRequest
1 голос
/ 22 марта 2020

Ввод: testlist = [[1,2,3,-1],2,3,[3,-4,1,3],-1,-3]

Требование: удалить элементы меньше нуля, затем выровнять элементы без использования l oop

вывод: [[1,4,9],4,9,[9,1,9]]

def testlist(f, l):
    def listelement(inside):
        return testlist(f, inside) if type(inside) is list else f(inside)

    return list(map(listelement, l))


def square(x):
    return x * x


def square_list(l):
    return testlist(square, l)

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Вместо двух отдельных функций вы можете выполнять возведение в квадрат и проверку на положительное значение в одной и той же функции.

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

test_list = [[1,2,3,-1],2,3,[3,-4,1,3],-1,-3]


def positive_square_list(lst, index):
    if index < len(lst):
        if type(lst[index]) == list:
            positive_square_list(lst[index], 0)
            index += 1

        if lst[index] < 0:
            lst.pop(index)
            index -= 1
            if index == len(lst):
                return lst
            else:
                return positive_square_list(lst, index+1)

        lst[index] = lst[index] ** 2
        return positive_square_list(lst, index+1)

    return lst



output = positive_square_list(test_list, 0)

Выход переменной будет иметь значения: [[1,4,9],4,9,[9,1,9]]

1 голос
/ 22 марта 2020

Вы можете подумать о проблеме рекурсивно:

  1. Если список пуст, вернуть пустой ist
  2. Если это не так, для первого элемента списка:
    1. Если это отрицательное число, опустить его
    2. Если это неотрицательное число, поставить его в квадрат
    3. Если это список, применить к нему функцию.
  3. Возвращает список, представляющий собой конкатенацию элемента из # 1 и функции, примененной к остальной части списка.

Или, в python:

def func(l):
    if len(l) == 0:
        return []

    item = l[0]
    if isinstance(item, list):
        result = [func(item)]
    elif item >= 0:
        result = [item**2]
    else:
        result = []

    return result + func(l[1:])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...