Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Kami Boleh Meratakan Senarai Bersarang Sewenang-wenangnya dengan Cekap dalam Python?

Bagaimanakah Kami Boleh Meratakan Senarai Bersarang Sewenang-wenangnya dengan Cekap dalam Python?

DDD
DDDasal
2024-12-28 16:04:11386semak imbas

How Can We Efficiently Flatten Arbitrarily Nested Lists in Python?

Meratakan Senarai Bersarang Sewenang-wenangnya

Senarai bersarang, dengan tahap kedalaman yang berbeza-beza, memberikan cabaran dalam mengurangkannya kepada satu dimensi. Walaupun terdapat banyak penyelesaian untuk meratakan senarai cetek, ramai yang bergelut dengan senarai bersarang yang tidak teratur, seperti [[[1, 2, 3], [4, 5]], 6].

The Recursive Pendekatan

Satu pendekatan, seperti yang dinyatakan dalam soalan, melibatkan rekursi:

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

Algoritma ini berulang melalui senarai, meratakan mana-mana senarai bersarang secara rekursif dan menambahkan elemen tidak boleh lelar pada hasilnya.

Fungsi Penjana untuk Kebolehbacaan dan Prestasi yang Dipertingkatkan

Fungsi penjana menyediakan pendekatan alternatif yang boleh meningkatkan kebolehbacaan dan kecekapan proses perataan kami.

Python 2

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

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

Dalam Python 3, hasil daripada operator dengan mudah mengembalikan item daripada penjana bersarang secara berurutan, manakala dalam Python 2, kami berulang secara eksplisit melalui sub-penjana.

Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Meratakan Senarai Bersarang Sewenang-wenangnya 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