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
Lepaskan: 2024-12-28 16:04:11
asal
406 orang telah melayarinya

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

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

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

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!

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