Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Kami Boleh Mengeluarkan Pendua Berturut-turut dengan Cekap daripada Senarai Semasa Memelihara Elemen Unik dalam Python?

Bagaimanakah Kami Boleh Mengeluarkan Pendua Berturut-turut dengan Cekap daripada Senarai Semasa Memelihara Elemen Unik dalam Python?

DDD
DDDasal
2024-12-11 19:12:12118semak imbas

How Can We Efficiently Remove Consecutive Duplicates from a List While Preserving Unique Elements in Python?

Menghapuskan Pendua Berturut-turut dan Mengekalkan Elemen Berbeza

Apabila bekerja dengan senarai, selalunya perlu menghapuskan elemen pendua berturut-turut. Timbul persoalan: bagaimanakah kita boleh mengalih keluar elemen sedemikian dengan cekap sambil mengekalkan elemen yang berbeza?

Satu pendekatan adalah untuk melelakan senarai, membandingkan setiap elemen dengan penggantinya. Jika ia sama, kami memadamkan elemen semasa. Kaedah ini, walaupun berfungsi, agak tidak cekap dan tidak mempunyai keanggunan Pythonic.

Menggunakan GroupBy untuk Penyingkiran Elegan Pendua

Modul Python itertools menyediakan fungsi berkuasa yang dipanggil groupby yang cekap dapat mengumpulkan unsur-unsur berturut-turut. Dengan menggunakan groupby, kami boleh mencapai matlamat kami dengan lebih sedikit baris kod dan meningkatkan kejelasan.

Untuk bahagian pertama soalan (mencari elemen unik), kami boleh menggunakan groupby untuk mengumpulkan elemen berturut-turut, kemudian pilih kekunci (yang mewakili unik elemen).

from itertools import groupby

L = [1,1,1,1,1,1,2,3,4,4,5,1,2]
unique_elements = [key for key, _group in groupby(L)]

Output:

[1, 2, 3, 4, 5, 1, 2]

Memelihara Elemen Terbeza Menggunakan Jumlah

Untuk memperhalusi lagi penyelesaian, kita perlu menghapuskan elemen yang mempunyai pendua berturut-turut. Sekali lagi, groupby datang membantu kami. Dengan menyemak panjang setiap kumpulan, kita boleh menentukan sama ada sesuatu elemen itu berbeza atau tidak.

distinct_elements = [k for k, g in groupby(L) if len(list(g)) < 2]

Output:

[2, 3, 5, 1, 2]

Sebagai alternatif, kita boleh menggunakan ungkapan penjana untuk mengelak daripada mencipta senarai sementara untuk setiap kumpulan dan sebaliknya mengira jumlah penjana:

distinct_elements = [k for k, g in groupby(L) if sum(1 for i in g) < 2]

Ini menyediakan pelaksanaan penyelesaian yang lebih padat dan cekap, dengan berkesan menghapuskan pendua berturut-turut sambil mengekalkan elemen yang berbeza.

Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mengeluarkan Pendua Berturut-turut dengan Cekap daripada Senarai Semasa Memelihara Elemen Unik 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