Ratakan daftar daftar dengan Python

Pada artikel ini, kita akan melihat bagaimana kita bisa meratakan daftar daftar dengan cara yang berbeda. Sebelum melanjutkan, kita harus mengetahui perbedaan antara perataan dangkal dan perataan dalam.

Perataan dangkal: Ini berarti meratakan daftar ke satu tingkat kedalaman saja.

Perataan dalam: Ini berarti meratakan daftar ke tingkat kedalaman apa pun.

Topik yang akan kita bahas dalam artikel ini adalah sebagai berikut:

Metode 1: Menggunakan for loop

Dalam metode ini, kita akan menggunakan for-loop, yang sangat umum di setiap bahasa pemrograman. Kami mengulangi setiap elemen dalam daftar dan kemudian mengulangi elemen itu lebih lanjut, seperti yang ditunjukkan pada program di bawah ini.

lst = [[30,7],[8,9],[30,7],[8,9]]
flatten_list = []
for i in lst:
  for item in i:
    flatten_list.append(item)
print("list before flattening", lst)
print ("flattened list: ",flatten_list)

Keluaran:

list before flattening [[30, 7], [8, 9], [30, 7], [8, 9]]
flattened list:  [30, 7, 8, 9, 30, 7, 8, 9]

Baris 1 : Kami membuat daftar daftar.

Baris 3 sampai 5 : Pada baris ini, kita menjalankan perulangan for bersarang. Perulangan for bagian luar adalah untuk daftar utama, dan perulangan for bagian dalam adalah untuk elemen-elemennya. Jika Anda melihat loop bersarang ini, maka Anda akan mengetahui bahwa setiap elemen dari daftar sub-elemen telah diekstraksi dan ditambahkan ke daftar baru (flatten_list). Dengan cara ini, setiap elemen dalam sub-daftar sekarang dipisahkan.

Baris 6 hingga 7 : Baris ini menunjukkan daftar asli sebelum dan sesudah meratakan daftar.

Metode 2: Menggunakan pemahaman daftar

Pemahaman daftar adalah metode lanjutan dari loop for di atas di mana kita menulis semuanya dalam satu baris.

lst = [[30,7],[8,9],[30,7],[8,9]]
print("list before flattening", lst)
print ("list after flattening",[item for i in lst for item in i])

Keluaran:

list before flattening [[30, 7], [8, 9], [30, 7], [8, 9]]
list after flattening [30, 7, 8, 9, 30, 7, 8, 9]

Baris 1 : Kami membuat daftar daftar.
Line 3: Baris ini menjalankan dua loop dalam satu baris untuk meratakan daftar.

Metode 3: Menggunakan metode rata ()

Metode lain adalah dengan menggunakan perpustakaan rata () seperti yang ditunjukkan pada program yang diberikan di bawah ini. Tetapi metode perataan hanya akan berfungsi pada satu tingkat daftar bersarang; jika ada daftar yang sangat bersarang, maka itu tidak akan meratakan daftar. Contoh program bersarang tunggal dan bersarang dalam diberikan di bawah ini.

from iteration_utilities import flatten
lst = [[30,7],[8,9],[30,7],[8,9]]
print(list(flatten(lst)))

Keluaran:

[30, 7, 8, 9, 30, 7, 8, 9]

Baris 3 : Kami memanggil metode flatten dan meneruskan daftar ke dalamnya sebagai argumen. Output di atas menunjukkan bahwa daftar daftar kami sekarang diratakan.

Sekarang, kita akan melihat daftar yang sangat bersarang untuk metode flatten.

from iteration_utilities import flatten
lst = [[30,7],[8,9],[30,7],[8,9],[[2]]]
print(list(flatten(lst)))

Keluaran:

[30, 7, 8, 9, 30, 7, 8, 9, [2]]

Baris 2 : Kami membuat daftar bersarang dan juga menambahkan elemen lain [[2]] yang sangat bersarang.

Baris 3 : Kami memanggil metode flatten dan meneruskan daftar ke dalamnya sebagai argumen. Output di atas menunjukkan bahwa tidak dilakukan meratakan daftar yang sangat bersarang sepenuhnya karena elemen [2] masih berada di dalam daftar.

Metode 4: Menggunakan metode deepflatten ()

Metode lainnya adalah deepflatten() yang dapat meratakan daftar yang sangat bersarang, yang tidak dilakukan dengan metode flatten seperti yang telah kita lihat pada contoh di atas.

from iteration_utilities import deepflatten
lst = [[30,7],[8,9],[30,7],[8,9],[ [200 ] ]]
print("list lst before flattening", lst)
flatten_lst = list(deepflatten(lst))
print("list lst after flattening", flatten_lst)

Keluaran:

list lst before flattening [[30, 7], [8, 9], [30, 7], [8, 9], [[200]]]
list lst after flattening [30, 7, 8, 9, 30, 7, 8, 9, 200]

Baris 1 : Kami mengimpor metode deepflatten.

Baris 4 : Kami memanggil metode deepflatten dan meneruskan daftar yang sangat bersarang ke dalamnya sebagai argumen. Output di atas menunjukkan bahwa daftar yang sangat bersarang sekarang diratakan.

Metode 5: Menggunakan metode pandas flatten ()

Metode ini membuat daftar rata bahkan jika daftarnya sangat bersarang.

from pandas.core.common import flatten
lst = [[30,7],[8,9],[30,7],[8,9],[[2]]]
print("list before flattening", lst)
print ("flattened list: ",list(flatten(lst)))

Keluaran:

list before flattening [[30, 7], [8, 9], [30, 7], [8, 9], [[2]]]
flattened list:  [30, 7, 8, 9, 30, 7, 8, 9, 2]

Baris 4 : Kami memanggil metode flatten dan meneruskan daftar yang sangat bersarang ke dalamnya sebagai argumen. Output di atas menunjukkan bahwa daftar yang sangat bersarang sekarang diratakan.

Method 6: Menggunakan metode matplotlib flatten ()

Metode ini membuat daftar rata bahkan jika daftarnya sangat bersarang.

from matplotlib.cbook import flatten
lst = [[30,7],[8,9],[30,7],[8,9],[[2]]]
print("list before flattening", lst)
print ("flattened list: ",list(flatten(lst)))

Keluaran:

list before flattening [[30, 7], [8, 9], [30, 7], [8, 9], [[2]]]
flattened list:  [30, 7, 8, 9, 30, 7, 8, 9, 2]

Baris 4: Kami memanggil metode flatten dan meneruskan daftar yang sangat bersarang ke dalamnya sebagai argumen. Output di atas menunjukkan bahwa daftar yang sangat bersarang sekarang diratakan.

Metode 7: Menggunakan metode unipath flatten ()

Metode ini membuat daftar rata bahkan jika daftarnya sangat bersarang.

import unipath
from unipath.path import flatten
lst = [[30,7],[8,9],[30,7],[8,9],[[2]]]
print("list before flattening", lst)
print ("flattened list: ",list(flatten(lst)))

Keluaran:

list before flattening [[30, 7], [8, 9], [30, 7], [8, 9], [[2]]]
flattened list:  [30, 7, 8, 9, 30, 7, 8, 9, 2]

Baris 5 : Kami memanggil metode flatten dan meneruskan daftar yang sangat bersarang ke dalamnya sebagai argumen. Output di atas menunjukkan bahwa daftar yang sangat bersarang sekarang diratakan.

Metode 8: Menggunakan metode setuptools flatten ()

Metode ini membuat daftar rata hanya ke satu level.

from setuptools.namespaces import flatten
lst = [[30,7],[8,9],[30,7],[8,9],[[2]]]
print("list before flattening", lst)
print ("flattened list: ",list(flatten(lst)))

Keluaran:

list before flattening [[30, 7], [8, 9], [30, 7], [8, 9], [[2]]]
flattened list:  [30, 7, 8, 9, 30, 7, 8, 9, [2]]

Baris 2 : Kami membuat daftar bersarang dan juga menambahkan elemen lain [[2]] yang sangat bersarang.

Baris 4 : Kami memanggil metode flatten dan meneruskan daftar ke dalamnya sebagai argumen. Output di atas menunjukkan bahwa tidak dilakukan meratakan daftar yang sangat bersarang sepenuhnya karena elemen [2] masih berada di dalam daftar.

Metode 9: Menggunakan metode itertools.chain

Untuk membongkar daftar daftar, kita juga dapat menggunakan metode itertools.chain. Metode ini selanjutnya memiliki dua cara untuk meratakan daftar daftar. Kedua metode diberikan di bawah ini. Cara-cara ini juga membuat daftar list menjadi satu level saja.

Menggunakan itertools.chain.from_iterable

import itertools
lst = [[30,7],[8,9],[30,7],[8,9],[[2]]]
print("list lst before flattening", lst)
flatten_lst = list((itertools.chain.from_iterable(lst)))
print("list lst after flattening", flatten_lst)

Keluaran:

list lst before flattening [[30, 7], [8, 9], [30, 7], [8, 9], [[2]]]
list lst after flattening [30, 7, 8, 9, 30, 7, 8, 9, [2]]

Baris 2 : Kami membuat daftar bersarang dan juga menambahkan elemen lain [[2]] yang sangat bersarang.

Baris 4 : Kami memanggil metode itertools.chain.from_iterable() dan meneruskan daftar ke dalamnya sebagai argumen. Output di atas menunjukkan bahwa itu tidak dilakukan untuk meratakan daftar yang sangat bersarang karena elemen [2] masih di dalam daftar.

Menggunakan operator *

import itertools
lst = [[30,7],[8,9],[30,7],[8,9],[[2]]]
print("list lst before flattening", lst)
flatten_lst = list((itertools.chain(*lst)))
print("list lst after flattening", flatten_lst)

Keluaran:

list lst before flattening [[30, 7], [8, 9], [30, 7], [8, 9], [[2]]]
list lst after flattening [30, 7, 8, 9, 30, 7, 8, 9, [2]]

Metode 10: Menggunakan metode numpy.ravel ()

Metode lainnya adalah numpy.ravel yang juga meratakan daftar bersarang. Tetapi metode ini meratakan ke satu tingkat sarang.

import numpy as np 
lst = np.array([[30,7],[8,9],[30,7],[8,9]])
flatten_lst = lst.ravel()
print("list before flattening", lst)
print ("flattened list: ",list(flatten(lst)))

Keluaran:

list before flattening [[30  7]
 [ 8  9]
 [30  7]
 [ 8  9]]
flattened list:  [30, 7, 8, 9, 30, 7, 8, 9]

Baris 3 : Kami memanggil metode numpy ravel. Output di atas menunjukkan bahwa array daftar bersarang kami sekarang diratakan.

Metode 11: Menggunakan metode numpy reshape ()

Metode lainnya adalah numpy reshape, yang juga meratakan daftar bersarang. Tetapi metode ini meratakan ke satu tingkat sarang.

import numpy as np 
lst = np.array([[30,7],[8,9],[30,7],[8,9]])
flatten_lst = lst.reshape(-1)
print("list before flattening", lst)
print ("flattened list: ",list(flatten(lst)))
list before flattening [[30  7] 
 [ 8  9]
 [30  7]
 [ 8  9]]
flattened list:  [30, 7, 8, 9, 30, 7, 8, 9]

Baris 3 : Kami memanggil metode reshape(-1). Output di atas menunjukkan bahwa array daftar bersarang kami sekarang diratakan.

Metode 12: Menggunakan metode numpy flatten ()

Metode lainnya adalah numpy flatten (), yang juga meratakan daftar bersarang. Tetapi metode ini meratakan ke satu tingkat sarang.

import numpy as np 
lst = np.array([[30,7],[8,9],[30,7],[8,9]])
flatten_lst = lst.flatten()
print("list before flattening", lst)
print ("flattened list: ",list(flatten(lst)))


Keluaran:

list before flattening [[30  7]
 [ 8  9]
 [30  7]
 [ 8  9]]
flattened list:  [30, 7, 8, 9, 30, 7, 8, 9]

Baris 5 : Kita sebut metode flatten. Output di atas menunjukkan bahwa array daftar bersarang kami sekarang diratakan.

Metode 13: Menggunakan metode numpy.concatenate ()

Metode lainnya adalah numpy.concatenate (), yang juga meratakan daftar bersarang. Tetapi metode ini meratakan ke satu tingkat sarang.

import numpy as np 
lst = np.array([[30,7],[8,9],[30,7],[8,9]])
flatten_lst = list(np.concatenate(lst))
print("list before flattening", lst)
print ("flattened list: ",list(flatten(lst)))

Keluaran:

list before flattening [[30  7]
 [ 8  9]
 [30  7]
 [ 8  9]]
flattened list:  [30, 7, 8, 9, 30, 7, 8, 9]

Baris 3 : Kami memanggil metode numpy.concatenate () dan meneruskan array daftar bersarang ke dalamnya sebagai argumen. Output di atas menunjukkan bahwa array daftar bersarang kami sekarang diratakan.

Metode 14: Menggunakan metode datar numpy < /font>

Metode lainnya adalah numpy flatyang juga meratakan daftar bersarang. Tetapi metode ini meratakan ke satu tingkat sarang.

import numpy as np 
lst = np.array([[30,7],[8,9],[30,7],[8,9]])
flatten_lst = list(lst.flat)
print("list before flattening", lst)
print ("flattened list: ",list(flatten(lst)))

Keluaran:

list before flattening [[30  7]
 [ 8  9]
 [30  7]
 [ 8  9]]
flattened list:  [30, 7, 8, 9, 30, 7, 8, 9]

Baris 3 : Kami memanggil metode flat, dan output di atas menunjukkan bahwa array daftar bersarang kami sekarang diratakan.

Kesimpulan:

Di blog ini, kami telah menunjukkan kepada Anda berbagai metode yang dapat kami gunakan untuk meratakan daftar daftar kami. Semua metode di atas bekerja dengan sempurna untuk satu tingkat daftar bersarang. Tetapi jika ada daftar yang sangat bersarang, beberapa metode di atas bekerja dengan sempurna. Jadi, terserah Anda dan, sesuai dengan persyaratan program Anda, metode mana yang ingin Anda gunakan.

Kode untuk artikel ini juga tersedia di tautan Github:
https://github.com/shekharpandey89/flatten-the-list-of-list

Related Posts