Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Meratakan Senarai Bersarang Tidak Teratur dengan Cekap dalam Python?

Bagaimana untuk Meratakan Senarai Bersarang Tidak Teratur dengan Cekap dalam Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-30 18:38:20589semak imbas

How to Efficiently Flatten Irregularly Nested Lists in Python?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn