Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Kami Boleh Meratakan Senarai Bersarang Sewenang-wenangnya dengan Cekap dalam 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!