по заданному списку вернуть список целочисленных значений из списка - PullRequest
0 голосов
/ 15 октября 2019

с учетом списка

lt=[1,2,[3,[5,[6,[7]]]]] 

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

return [1,2,3,5,6,7]

Ответы [ 3 ]

1 голос
/ 15 октября 2019

Это модифицированная версия решения @ DarrylG, помогающая уменьшить счетчик строк.

flatten = lambda lst: sum((flatten(v) if isinstance(v, list) else [v] for v in lst), [])
flatten(lt)

Лямбда-функции могут быть рекурсивными, но на одну строку короче объявлений функций.

И это также может быть в одной строке, используя ;

flatten = lambda lst: sum((flatten(v) if isinstance(v, list) else [v] for v in lst), []) ; flatten(lt) 
1 голос
/ 15 октября 2019

Используйте функцию для рекурсивного выравнивания.

Решение

# Custom function
def get_flatlist(l, flat_list=None, no_more_list_elements = True):
    if flat_list is None:
        flat_list = list()

    for x in l:
        if isinstance(x,list):        
            flat_list += x
            no_more_list_elements = no_more_list_elements & False
        else:
            flat_list.append(x)
            no_more_list_elements = no_more_list_elements & True
    #print(no_more_list_elements)
    if not no_more_list_elements:        
        flat_list = get_flatlist(flat_list.copy(), 
                                 flat_list=None, 
                                 no_more_list_elements = True)
    return flat_list    

get_flatlist(lt)

Выход :

[1, 2, 3, 5, 6, 7]

Данные

lt=[1,2,[3,[5,[6,[7]]]]] 
0 голосов
/ 15 октября 2019

Метод сглаживания списков списков (функция 1-2 строки) (мод Сглаживание нерегулярного списка списков )

  1. Использование генератора для создания списков из одного элемента
  2. Используйте сумму, чтобы добавить их в один список

<code>
def flatten(lst):
    return sum( ([x] if not isinstance(x, list) else flatten(x)
                 for x in lst), [] )</p>

<p>lt=[1,2,[3,[5,[6,[7]]]]] </p>

<p>print(flatten(lt))
Выход
[1, 2, 3, 5, 6, 7]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...