Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Penjana Python Boleh Meratakan Senarai Bersarang Sewenang-wenangnya Dengan Cekap?
Meratakan Senarai Tidak Teratur dengan Penjana Python
Masalah meratakan senarai senarai yang bersarang secara sewenang-wenangnya adalah perkara biasa, tetapi penyelesaian sedia ada sering gagal secara mendalam struktur bersarang. Khususnya, senarai seperti [[[1, 2, 3], [4, 5]], 6] tidak boleh diratakan menggunakan kebanyakan penyelesaian.
Fungsi berikut, berdasarkan penyelesaian daripada soalan lain, boleh meratakan senarai sedemikian dengan berkesan:
def flatten(x): result = [] for el in x: if hasattr(el, "__iter__") and not isinstance(el, basestring): result.extend(flatten(el)) else: result.append(el) return result
Walau bagaimanapun, sementara fungsi ini berfungsi, ia boleh dipertingkatkan dari segi kebolehbacaan dan prestasi menggunakan penjana berfungsi.
Python 2 dengan Iterable ABC
from collections import Iterable def flatten(xs): for x in xs: if isinstance(x, Iterable) and not isinstance(x, basestring): for item in flatten(x): yield item else: yield x
Python 3 dengan Iterable ABC dan Hasil Daripada
from collections.abc import Iterable def flatten(xs): for x in xs: if isinstance(x, Iterable) and not isinstance(x, (str, bytes)): yield from flatten(x) else: yield x
Penyelesaian berasaskan penjana ini menyediakan cara yang lebih ringkas dan cekap untuk meratakan yang tidak teratur senarai. Mereka berfungsi dengan mengulangi setiap elemen dalam senarai dan secara rekursif menghasilkan elemen untuk subsenarai. Sebarang unsur yang tidak boleh diulang (cth., nombor atau rentetan) akan dihasilkan dengan serta-merta.
Atas ialah kandungan terperinci Bagaimanakah Penjana Python Boleh Meratakan Senarai Bersarang Sewenang-wenangnya Dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!