Ръководство за изравняване на списък и списък със списъци в Python

Преобразуването на 2D масив в 1D масив се нарича изравняване. Има много подходи за решаване на проблема.

Ще разгледаме някои от тях в този урок.

Да видим един пример.

Вход

[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]

Изход

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#1. Примки

Най-често срещаният начин за решаване на проблема е чрез използване на цикли. Мисля, че повечето от вас вече го разбраха. Нека да видим стъпките за решаване на проблема с помощта на цикли.

  • Инициализирайте списъка със списъци с фиктивни данни и го наименувайте като данни.
  • Сега инициализирайте празен списък, наречен flat_list.
  • Обхождане на данните.
    • Разопаковайте всички елементи от текущия списък.
    • Добавете ги към flat_list, като използвате метода за добавяне на списък.
  • Отпечатайте резултата.

Вижте кода за проблема по-долу.

# initializing the data and an empty list
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
flat_list = []

# iterating over the data
for item in data:
    # appending elements to the flat_list
    flat_list += item

# printing the resultantn flat_list
print(flat_list)

Можете да използвате друг цикъл, за да добавите елементи от подсписък към flat_list вместо оператор за конкатенация. Можем също да използваме списъчни разбирания вместо цикли.

  Коригиране на връзката на доверие между тази работна станция и основния домейн неуспешно

И двамата вършат една и съща работа. Нека да видим следващия начин за решаване на проблема.

#2. Itertools – Верига

Ще използваме метод, наречен верига от вградения модул на itertools.

Веригата на методите итерира всеки подсписък и връща елементите, докато в него няма подсписъци. Той връща итерируем елемент, който трябва да преобразуваме в списък.

Нека видим стъпките, включени в решаването на проблема.

  • Инициализирайте списъка със списъци с фиктивни данни и го наименувайте като данни.
  • Вземете изравняването на iterable с помощта на itertools.chain(*data).
  • Преобразувайте получената итерируема в списък.
  • Отпечатайте плоския списък.

Можете да преминете през кода в фрагмента по-долу.

# importing the module
import itertools

# initializing the data
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]

# flattening the list and storing the result
flat_list = itertools.chain(*data)

# converting iterable to list and printing
print(list(flat_list))

#3. Изравняване на многостепенни списъци

Видяхме как да изравним списък от списъци. Методите по-горе, които обсъдихме за изравняване на списъка, няма да работят за списъци на много нива. Да видим един пример.

  7 начина за ефективна защита на вашия бизнес от кибератаки

Вход

[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]

Изход

[1, 2, 3, 4, 5, 6, 7, 8, 9]

Тъй като не знаем дълбочината на списъците преди програмата, трябва да използваме рекурсия, за да решим проблема.

  • Инициализирайте данните, както е показано в примера, и ги наименувайте като данни.
  • Инициализирайте празен списък, наречен flat_list.
  • Напишете функция, наречена flatten_list.
    • Итериране на елементите от дадения списък.
    • Ако елементът е списък, тогава рекурсивно извикайте отново същата функция.
    • Ако елементът не е списък, добавете елемента към flat_list.
  • Извикване на функцията с данни.
  • Функцията ще запълни всички елементи в списъка flat_list.
  • Отпечатайте flat_list, за да проверите изхода.

уф! много стъпки за кодиране. не се притеснявай Преобразуването на горните изрази в код няма да отнеме повече от минути.

# initializing the data and empty list
data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
flat_list = []

# function
def flatten_list(data):
    # iterating over the data
    for element in data:
        # checking for list
        if type(element) == list:
            # calling the same function with current element as new argument
            flatten_list(element)
        else:
            flat_list.append(element)

# flattening the given list
flatten_list(data)

# printing the flat_list
print(flat_list)

Не забравяйте, че не преобразувахме съществуващия списък. Вместо това създадохме нов списък с дадения елемент от списъка.

  Как можете да промените плана си за Spotify

Заключение

Надяваме се, че урокът ви е харесал. Може да има много други начини за изравняване на списък в Python, но смятам, че горните вероятно са най-лесните.

Приятно кодиране 🙂

x