Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Penjana Python Boleh Meratakan Senarai Bersarang Sewenang-wenangnya Dengan Cekap?

Bagaimanakah Penjana Python Boleh Meratakan Senarai Bersarang Sewenang-wenangnya Dengan Cekap?

Mary-Kate Olsen
Lepaskan: 2024-12-21 15:02:09
asal
691 orang telah melayarinya

How Can Python Generators Efficiently Flatten Arbitrarily Nested Lists?

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

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

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

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan