Краткое руководство по выравниванию списка в python

Есть много ситуаций, когда вы можете столкнуться со списком, в который вложены другие списки. Плоский список — это единый список, содержащий все элементы вложенного списка, без подсписков или вложенных элементов. Это может быть полезно для различных целей, таких как анализ данных, машинное обучение и многое другое. Ниже я предлагаю четыре метода выравнивания списка.

1. Использование цикла for:

Мой наименее предпочтительный способ - использовать вложенный цикл. Внешний цикл for перебирает каждый подсписок в original_list. Для каждого подсписка внутренний цикл for перебирает каждый элемент в этом подсписке. Затем внутренний цикл for добавляет каждый элемент в flat_list с помощью метода append.

original_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat_list = []
for sublist in original_list:
    for item in sublist:
        flat_list.append(item)
print(flat_list) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

2. Использование понимания списка:

Более элегантный способ — использовать понимание списка. Метод понимания списка использует два цикла: первый цикл проходит по каждому подсписку в original_list, а второй — по каждому элементу в подсписках. Элемент в зацикленном подсписке затем добавляется к flat_list.

original_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat_list = [item for sublist in original_list for item in sublist]
print(flat_list) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

3. Используя метод itertools.chain:

Мы можем использовать модуль itertools с функцией itertools.chain.from_iterable(), чтобы взять элементы original_list и объединить их в единый список.

import itertools
original_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat_list = list(itertools.chain.from_iterable(original_list))
print(flat_list) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

4. Использование рекурсии:

К сожалению, приведенные выше решения не будут сглаживать список с несколькими вложенными списками (например, [[1, 2, 3], [4, [5, 6, 7], 8], [7, 8, [9, 10, 11]]). Однако мы можем использовать рекурсию для выравнивания этих типов списков.

Рекурсия — это метод, при котором функция продолжает вызывать себя до тех пор, пока не будет выполнено определенное условие. Например, функция ниже начинается с проверки того, что входной список пуст. Если список пуст, функция вернет пустой список. Если входной список не пуст, функция проверит, является ли первый элемент списка списком; если это так, функция снова вызовет себя, передав первый элемент списка и остальную часть списка. Этот процесс будет продолжаться до тех пор, пока все элементы первого элемента не будут рекурсивно сведены и добавлены к остальным элементам. Если первый элемент не является списком, функция вернет первый элемент, объединенный с результатом функции flatten, снова вызванной для остальной части списка.

def flatten(lst):
    if lst == []:
        return lst
    if type(lst[0]) == list:
        return flatten(lst[0]) + flatten(lst[1:])
    return lst[:1] + flatten(lst[1:])

original_list = [[1, 2, 3], [4, [5, 6, 7], 8], [7, 8, [9, 10, 11]]]
flat_list = flatten(original_list)
print(flat_list) # [1, 2, 3, 4, 5, 6, 7, 8, 7, 8, 9, 10, 11]

Заключительное замечание

Вот и все, выше приведены четыре способа выравнивания списков. Рекурсия, безусловно, наиболее универсальна, когда у вас есть несколько уровней вложенных списков внутри списка. Оставьте комментарий, если вы используете другой метод.

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

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord.

Повысьте узнаваемость и признание вашего технического стартапа с помощью Circuit.