Претварање 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)
Запамтите, нисмо конвертовали постојећу листу. Уместо тога, направили смо нову листу са датим елементом листе.
Закључак
Надам се да сте уживали у туторијалу. Можда постоји много других начина да се листа поравна у Питхон-у, али сматрао сам да су горе наведени вероватно најлакши.
Срећно кодирање 🙂