Водич за изравнавање листе и листе листа у Питхон-у

Претварање 2Д низа у 1Д низ назива се изравнавање. Постоји много приступа за решавање проблема.

Неке од њих ћемо истражити у овом водичу.

Хајде да видимо пример.

Улазни

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

Излаз

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

#1. Петље

Најчешћи начин за решавање проблема је коришћење петљи. Мислим да је већина вас већ добила. Хајде да видимо кораке за решавање проблема помоћу петљи.

  • Иницијализирајте листу листа лажним подацима и именујте је као подаци.
  • Сада иницијализујте празну листу која се зове флат_лист.
  • Итерирајте податке.
    • Распакујте све елементе са тренутне листе.
    • Додајте их у флат_лист користећи метод додавања листе.
  • Одштампајте резултат.

Погледајте код за проблем у наставку.

# 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)

Можете користити другу петљу да додате елементе подлисте у флат_лист уместо оператора спајања. Такође можемо да користимо разумевања листе уместо петљи.

Оба раде исти посао. Хајде да видимо следећи начин да решимо проблем.

#2. Итертоолс – Ланац

Користићемо метод који се зове ланац из уграђеног модула итертоолс.

Ланац метода понавља сваку подлисту и враћа елементе све док у њој нема подлиста. Враћа итерабле који морамо да конвертујемо у листу.

  Како сцрапе Веб са резиденцијалним проксијима: Водич за почетнике

Хајде да видимо кораке који су укључени у решавање проблема.

  • Иницијализирајте листу листа лажним подацима и именујте је као подаци.
  • Набавите итерабле флаттен користећи итертоолс.цхаин(*дата).
  • Претворите резултујући итерабле у листу.
  • Одштампајте листу поравнања.

Можете проћи кроз код у доњем исјечку.

# 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. Изравнајте листе на више нивоа

Видели смо како да сравнимо листу листа. Горе наведене методе о којима смо разговарали за изравнавање листе неће радити за листе на више нивоа. Хајде да видимо пример.

Улазни

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

Излаз

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

Пошто не знамо дубину листа пре програма, морамо да користимо рекурзију да решимо проблем.

  • Иницијализирајте податке као што је приказано у примеру и назовите их као подаци.
  • Иницијализујте празну листу која се зове флат_лист.
  • Напишите функцију која се зове флаттен_лист.
    • Пређите преко елемената дате листе.
    • Ако је елемент листа онда поново рекурзивно позовите исту функцију.
    • Ако елемент није листа, додајте елемент у флат_лист.
  • Позовите функцију са подацима.
  • Функција ће попунити све елементе на листи флат_лист.
  • Одштампајте флат_лист да бисте проверили излаз.

Фуј! много корака за кодирање. Не брини. Претварање горњих изјава у код неће трајати више од минута.

# 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)

Запамтите, нисмо конвертовали постојећу листу. Уместо тога, направили смо нову листу са датим елементом листе.

  Како инсталирати Анацонда на Убунту

Закључак

Надам се да сте уживали у туторијалу. Можда постоји много других начина да се листа поравна у Питхон-у, али сматрао сам да су горе наведени вероватно најлакши.

Срећно кодирање 🙂