Ratakan daftar daftar python

Ada beberapa cara di mana daftar bersarang dapat dibongkar dan dibuat menjadi daftar datar, beberapa dari pendekatan ini tidak memerlukan perpustakaan sedangkan yang lain menggunakan itertools, functools, dan numpy

1. Perulangan dan Daftar pemahaman

Ini adalah cara termudah untuk meratakan daftar. Ini menggunakan loop for untuk mengulang daftar utama dan loop for bersarang lainnya untuk mengulang elemen daftar utama

nested_list = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
flat_list = []
for sublist in nested_list:
  for element in sublist:
    flat_list.append(element)
print(flat_list)

Keluaran

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

Versi yang lebih pendek dari ini menggunakan pemahaman daftar

flat_list = [element for sublist in nested_list for element in sublist]

Alternatifnya, extend() dapat digunakan untuk membuat daftar yang dihasilkan tanpa loop bersarang

flat_list = []
for sublist in nested_list:
  flat_list.extend(element)

2. itertools. rantai(*nested_list)

Itertools adalah bagian dari pustaka standar python dan menyediakan metode untuk membuat daftar datar. Metode rantai mengambil daftar sebagai argumen, oleh karena itu

[[7], [0, 9, 3], [4, 6, 8]]
[["lorem", "ipsum", "seth", "sir"], ["domat", "texeto", "do"]]
5 digunakan untuk membongkar daftar, baca lebih lanjut tentang *args di sini, nilai kembaliannya adalah iterator dan bukan daftar, menggunakan daftar() dipaksa untuk menghasilkan semua elemen

import itertools

nested_list = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
flat_list = itertools.chain(*nested_list)
flat_list  = list(flat_list)

3. itertools. rantai. from_iterable(nested_list)

Mirip dengan itertools. chain() tetapi mengambil daftar bersarang sebagai argumen

import itertools

nested_list = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
flat_list = itertools.chain.from_iterable(nested_list)
flat_list  = list(flat_list)
_

4. functools. kurangi(fungsi, nested_list)

reduce() bekerja dengan menerapkan fungsi ke dua elemen iterable secara kumulatif

from functools import reduce

nested_list = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
flat_list = reduce(lambda x, y: x+y, nested_list)

Alternatifnya, alih-alih menulis fungsi lambda, built-in dapat digunakan

import operator
from functools import reduce

nested_list = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
flat_list = reduce(operator.concat, nested_list)
_

5. numpy. menggabungkan(nested_list)

Mengembalikan daftar gabungan, bukan iterator

[[7], [0, 9, 3], [4, 6, 8]]
[["lorem", "ipsum", "seth", "sir"], ["domat", "texeto", "do"]]
_0

6. numpy. array(daftar_bersarang). datar

Array Numpy memiliki properti flat yang dapat digunakan untuk mendapatkan iterator untuk array yang diratakan tetapi hanya berfungsi jika daftar di dalam daftar bersarang memiliki panjang yang sama

Bagaimana Anda meratakan daftar daftar dengan Python?

Ada tiga cara untuk meratakan daftar Python. .
Menggunakan pemahaman daftar
Menggunakan loop for bersarang
Menggunakan itertools. rantai() metode

Bagaimana Anda meratakan daftar daftar dengan pemahaman daftar?

Untuk meratakan daftar daftar, gunakan pernyataan pemahaman daftar [x for l in lst for x in l] . Untuk memodifikasi semua elemen dalam daftar daftar (mis. g. , tingkatkan satu per satu), gunakan pemahaman daftar pemahaman daftar [[x+1 for x in l] for l in lst].

Bagaimana cara membuat daftar daftar menjadi satu daftar dengan Python?

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

Bagaimana Anda meratakan daftar bersarang di Python?

Berikan dua argumen ke metode sum(). my_list dan daftar kosong (mis. e. [ ] ) . sum() menggabungkan my_list dan [ ] untuk menghasilkan daftar yang rata.