Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Senarai Bersarang Tidak Teratur Boleh Diratakan dengan Cekap dalam Python Menggunakan Pendekatan Rekursif dan Berasaskan Penjana?

Bagaimanakah Senarai Bersarang Tidak Teratur Boleh Diratakan dengan Cekap dalam Python Menggunakan Pendekatan Rekursif dan Berasaskan Penjana?

DDD
Lepaskan: 2024-12-28 03:19:15
asal
323 orang telah melayarinya

How Can Irregularly Nested Lists Be Efficiently Flattened in Python Using Recursive and Generator-Based Approaches?

Meratakan Senarai Senarai Bersarang Tidak Teratur

Tugas meratakan senarai senarai bersarang boleh menjadi mencabar, terutamanya apabila sarang tidak teratur. Soalan yang dikemukakan menyiasat keberkesanan algoritma perata berikut:

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
Salin selepas log masuk

Walau bagaimanapun, soalan itu juga menimbulkan kemungkinan pendekatan alternatif menggunakan fungsi penjana.

Perataan Berasaskan Penjana

Fungsi berasaskan penjana boleh memudahkan proses merata dan berpotensi meningkatkan prestasi. Berikut ialah contoh untuk Python 2 dan 3:

Python 2

Menggunakan Iterable ABC yang diperkenalkan dalam Python 2.6:

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
Salin selepas log masuk

Python 3

In Python 3, jenis rentetan asas tidak lagi ada, dan tuple (str, bait) boleh digunakan sebaliknya. Selain itu, hasil daripada operator memudahkan lelaran ke atas penjana:

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
Salin selepas log masuk

Pendekatan berasaskan penjana mempunyai kelebihan untuk menjadi lebih ringkas dan berpotensi lebih cekap, kerana ia mengelakkan senarai perantaraan dan mengumpulkan keputusan langkah demi langkah .

Atas ialah kandungan terperinci Bagaimanakah Senarai Bersarang Tidak Teratur Boleh Diratakan dengan Cekap dalam Python Menggunakan Pendekatan Rekursif dan Berasaskan Penjana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan