Rumah >pembangunan bahagian belakang >Tutorial Python >Apakah Cara Paling Cekap untuk Meratakan Senarai Cetek dalam Python?

Apakah Cara Paling Cekap untuk Meratakan Senarai Cetek dalam Python?

Barbara Streisand
Barbara Streisandasal
2024-12-16 14:04:14333semak imbas

What's the Most Efficient Way to Flatten a Shallow List in Python?

Meratakan Senarai Cetek dalam Python

Meratakan senarai cetek iterable ialah operasi biasa dalam Python. Walaupun terdapat beberapa pendekatan, setiap satu menawarkan prestasi dan kebolehbacaan yang berbeza-beza.

1. Pemahaman Senarai

Pemahaman senarai bersarang boleh kelihatan meratakan senarai, tetapi ia menghasilkan NameError kerana pembolehubah yang digunakan dalam pemahaman luar (cth., menuitem) tidak ditakrifkan.

2. reduce

Fungsi reduce membenarkan untuk meratakan menggunakan list.__add__ sebagai operasi pengurangan. Walau bagaimanapun, kaedah ini memerlukan panggilan senarai(x) tambahan untuk menukar objek Django QuerySet kepada senarai.

3. itertools.chain

Fungsi itertools.chain menyediakan pilihan yang lebih cekap untuk meratakan senarai. Ia menggunakan penjana untuk menghasilkan elemen daripada iterables, mengelakkan keperluan untuk menyalin atau memahami senarai.

Contoh Kod:

import itertools

list_of_menuitems = [['image00', 'image01'], ['image10'], []]

# Flatten using list comprehension (not recommended)
# [image for image in menuitem for menuitem in list_of_menuitems]

# Flatten using reduce
# reduce(list.__add__, (list(mi) for mi in list_of_menuitems))

# Flatten using itertools.chain
flattened_list = list(itertools.chain(*list_of_menuitems))

Rantai ialah kaedah pilihan untuk meratakan senarai cetek kerana ia prestasi dan kemudahan penggunaan. Ia boleh mengendalikan sebarang lelaran, termasuk Django QuerySets.

Atas ialah kandungan terperinci Apakah Cara Paling Cekap untuk Meratakan Senarai Cetek 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