Bagaimana Anda mengubah daftar bersarang menjadi daftar datar dengan python?

Daftar mungkin adalah tipe data yang paling banyak digunakan di Python. Daftar yang dapat diubah menawarkan banyak fleksibilitas untuk melakukan sejumlah operasi pada item daftar

Daftar berisi item yang dipisahkan dengan koma dan dilampirkan dalam tanda kurung siku [ ]. Daftar di Python juga dapat memiliki item dari tipe data yang berbeda bersama-sama dalam satu daftar. Daftar bersarang tidak lain adalah daftar yang berisi beberapa daftar misalnya

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

Seringkali kita perlu mengonversi daftar bersarang ini menjadi daftar datar untuk melakukan operasi daftar biasa pada data. Untungnya, dengan Python, ada banyak cara untuk mencapainya

Dalam tutorial ini, kita akan membahas beberapa metode untuk mengonversi Nested list menjadi flat regular list

def flatten(li):
    return sum(([x] if not isinstance(x, list) else flatten(x)
                for x in li), [])

print(flatten([1, 2, [3], [4, [5, 6]]]))
_

Keluaran

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

Ratakan Daftar menggunakan Fungsi pengurangan bawaan

Metode 1

import functools
import operator

li = [[14], [215, 383, 87], [298], [374], [2, 3, 4, 5, 6, 7]]
flat_list = functools.reduce(operator.concat, li)
print(flat_list)

Keluaran

[14, 215, 383, 87, 298, 374, 2, 3, 4, 5, 6, 7]
_

Metode 2

from functools import reduce

li = [[14], [215, 383, 87], [298], [374], [2, 3, 4, 5, 6, 7]]
flat_list = reduce(lambda x, y: x+y, li)
print(flat_list)

Keluaran

[14, 215, 383, 87, 298, 374, 2, 3, 4, 5, 6, 7]
_

Metode 3

Ini adalah salah satu cara paling efisien untuk meratakan daftar besar

from itertools import chain

li = [[14], [215, 383, 87], [298], [374], [2, 3, 4, 5, 6, 7]]
flat_list = list(chain.from_iterable(li))
print(flat_list)
[14, 215, 383, 87, 298, 374, 2, 3, 4, 5, 6, 7]

Ratakan Daftar Menggunakan Pemahaman Daftar

li = [[14], [215, 383, 87], [298], [374], [2, 3, 4, 5, 6, 7]]

flat_list = [item for sublist in li for item in sublist]
print(flat_list)
_

Keluaran

[14, 215, 383, 87, 298, 374, 2, 3, 4, 5, 6, 7]
_

Ratakan Daftar Menggunakan NumPy

Perhatikan bahwa, NumPy tidak dibundel dengan Instalasi Python, Anda harus menginstalnya yang dapat dilakukan hanya dengan menggunakan Pip Installer

Pemahaman daftar adalah salah satu fitur terpenting Python. Pemahaman daftar menawarkan cara cerdas untuk membuat daftar berdasarkan daftar yang ada. Seiring dengan pembuatan daftar baru, pemahaman daftar dapat digunakan untuk memfilter dan memetakan elemen daftar. Biasanya, pemahaman daftar memiliki tanda kurung dan ekspresi, yang diikuti dengan perulangan for. Jika pernyataan juga digunakan dalam for loop ini

Pemahaman daftar selalu mengembalikan daftar baru kepada pengguna.    

Apa itu Daftar Bersarang?

Daftar bersarang tidak lain adalah beberapa daftar dalam satu daftar

Cara lingkaran

Kode

# Python code to flatten the nested list
# Python 3 Code

# Input list
nested_lists = [[3, 4, 5],[ 7, 8, 9, 10]]

# Initialized empty flatten list 
flat_list = []

#flatten the list
for x in nested_lists:
        for y in x:
                flat_list.append(y)

# Final Output
print("Flatten List:",flat_list)

Keluaran.  

Flatten List: [3, 4, 5, 7, 8, 9, 10]

Penjelasan

Di sini, daftar dua dimensi yang terdiri dari elemen [[3, 4, 5],[ 7, 8, 9, 10]] ditugaskan ke variabel yang disebut nested_lists. Variabel bernama flatten_list diinisialisasi dengan tanda kurung kosong []. Kemudian for loop digunakan untuk mengulangi elemen-elemen variabel nested_lists. Lingkaran dalam lainnya digunakan dalam lingkaran ini, karena merupakan daftar dua dimensi. Di dalam loop ini, baris flat_list. append(y) digunakan untuk menambahkan atau menambahkan semua elemen daftar ke flatten_list. Pernyataan print() mencetak elemen dari daftar ini

Oleh karena itu, hasil akhirnya adalah

Ratakan Daftar. [3, 4, 5, 7, 8, 9, 10]

Daftar Cara Pemahaman

# Python code to flatten the nested list
# Python 3 Code

# Input list
nested_lists = [[3, 4, 5],[ 7, 8, 9, 10]]

#flatten the lists
flat_list = [y for x in nested_lists for y in x]
print("Flatten List: ",flat_list)

Keluaran.  

Flatten List: [3, 4, 5, 7, 8, 9, 10]

Penjelasan

Elemen [[3, 4, 5],[ 7, 8, 9, 10]] digunakan untuk menginisialisasi variabel nested_lists. Baris kode berikutnya adalah y untuk x di nested_lists untuk y di x. Ini digunakan untuk meratakan elemen daftar dari daftar nested_list. Baris kode terakhir digunakan untuk mencetak elemen dari flat_list

Oleh karena itu, hasil akhirnya adalah

Ratakan Daftar. [3, 4, 5, 7, 8, 9, 10]

itertools. rantai() Fungsi

# Python code to flatten the nested list
# Python 3 Code

# Input list
nested_lists = [[1,2,3],[4,5,6], [7], [8,9]]

import itertools
listflat = list(itertools.chain(*nested_lists))
print("Flatten List:",listflat)

Keluaran.  

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

Penjelasan

Variabel nested_list diinisialisasi dengan elemen [[1,2,3],[4,5,6], [7], [8,9]]. Di baris kode berikutnya, pernyataan impor digunakan untuk memuat modul itertools. Kemudian, itertools. metode chain() digunakan untuk meratakan daftar di dalam variabel nested_list. Baris kode selanjutnya adalah

listflat = list(itertools.chain(*nested_lists))

Di sini, itertools. chain() mengambil elemen nested_lists sebagai argumen. Simbol * sebelum nested_lists mendefinisikan banyak atau semua elemennya. Kemudian hasil dari metode ini diumpankan ke metode list() untuk mengubah urutan menjadi daftar. Hasil akhir dari metode list() ditugaskan ke variabel yang disebut listflat. Nilai dalam variabel listflat dicetak pada baris terakhir menggunakan metode print()

Hasil akhirnya adalah

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

itertools. rantai. from_iterable()

# Python code to flattern the nested list
# Python 3 Code

# Input list
nested_lists = [[1,2,3],[4,5,6], [7], [8,9]]

import itertools
listflat = list(itertools.chain.from_iterable(nested_lists))
print("Flatten List:",listflat)

Keluaran.  

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

Penjelasan

Dalam program ini, sebuah variabel bernama nested_lists diberi nilai [[1,2,3],[4,5,6], [7], [8,9]]. Kemudian modul itertools dimuat menggunakan pernyataan import. Itertools. rantai. metode from_iterable() digunakan selanjutnya. Metode ini mengambil satu argumen yang bisa berupa daftar daftar. Jadi, elemen nested_lists diteruskan sebagai argumen ke itertools. rantai. from_iterable() metode. Hasil pemanggilan fungsi ini diteruskan sebagai argumen untuk metode list() yang mengubah urutan menjadi daftar

Daftar rata terakhir dicetak menggunakan kode print("Flatten List. ", listflat). Nilai resultan variabel listflat adalah [1, 2, 3, 4, 5, 6, 7, 8, 9].   

Kesimpulan

Seiring dengan metode dan daftar khusus, teknik pemahaman daftar dapat digunakan untuk operasi file. Anda dapat memfilter elemen dari daftar dan juga membentuk string. Saat membuat daftar, teknik pemahaman daftar lebih cepat dan efisien daripada fungsi normal. Namun, untuk membuat kode lebih mudah dibaca, hindari menulis daftar pemahaman yang sangat panjang seperti yang melibatkan perulangan for dalam satu baris.  

Bagaimana cara mengubah daftar bersarang menjadi daftar datar?

Dalam artikel ini, kami akan membahas 5 pendekatan berbeda untuk mendatar daftar daftar. .
Menggunakan loop bersarang
Menggunakan pemahaman daftar
Menggunakan rekursi
Menggunakan modul NumPy
Menggunakan metode sum() bawaan Python

Bagaimana Anda meratakan daftar bersarang daftar angka )?

Anda dapat meratakan daftar Python menggunakan pemahaman daftar, pengulangan for bersarang, dan itertools. metode rantai() . Pemahaman daftar adalah metode yang paling "Pythonic" dan karena itu disukai dalam banyak kasus. Meskipun for loop bersarang efektif, mereka menggunakan lebih banyak baris kode daripada pemahaman daftar.

Bagaimana cara membuat daftar bersarang menjadi daftar tunggal dengan Python?

Gunakan fungsi sum() untuk menggabungkan daftar bersarang ke satu daftar dengan meneruskan daftar kosong sebagai argumen kedua padanya .

Bagaimana Anda membuat daftar datar dengan Python?

Contoh. .
# mengimpor pustaka itertools
import itertools
# mendefinisikan daftar bersarang
daftar bersarang = [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]]
flattenlist = daftar(itertools. rantai(*daftar bersarang))
print('Daftar bersarang. ', daftar bersarang)
print('Daftar rata. ', daftar datar