Cara Meratakan Senarai Bersarang Tidak Teratur
Walaupun terdapat perbincangan mengenai meratakan struktur senarai, penyelesaian cenderung gagal apabila senarai bersarang dalam. Satu pendekatan berkesan dibentangkan di bawah:
Pendekatan Fungsi Rekursif
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
Fungsi ini menyemak sama ada setiap elemen boleh lelar (kecuali rentetan) dan meratakannya secara rekursif jika benar . Elemen tidak boleh lelar dilampirkan pada hasilnya.
Pendekatan Fungsi Penjana
Meningkatkan kebolehbacaan dan prestasi proses merata adalah mungkin menggunakan fungsi penjana:
Python 2 (menggunakan 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 (menggunakan tuple untuk str dan bait):
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
Fungsi penjana ini dengan malas mengembalikan elemen yang diratakan, mengoptimumkan penggunaan memori . Ia boleh diulang atau ditukar kepada senarai mengikut keperluan.
Atas ialah kandungan terperinci Bagaimana untuk Meratakan Senarai Bersarang Tidak Teratur dengan Cekap dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!