Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Mengeluarkan Elemen Pendua Berturut-turut dengan Cekap daripada Senarai Python?

Bagaimanakah Saya Boleh Mengeluarkan Elemen Pendua Berturut-turut dengan Cekap daripada Senarai Python?

Patricia Arquette
Lepaskan: 2024-12-01 09:37:09
asal
614 orang telah melayarinya

How Can I Efficiently Remove Consecutive Duplicate Elements from a Python List?

Mengalih keluar Elemen dengan Pendua Berturut-turut

Tugas biasa dalam pemprosesan data ialah menghapuskan pendua berturut-turut daripada senarai. Pelaksanaan Python yang mudah mungkin:

list = [1,1,1,1,1,1,2,3,4,4,5,1,2]
i = 0

while i < len(list)-1:
    if list[i] == list[i+1]:
        del list[i]
    else:
        i = i+1
Salin selepas log masuk

Pendekatan ini mengalih keluar elemen berulang, menghasilkan output seperti [1, 2, 3, 4, 5, 1, 2].

Menghapuskan Elemen Yang Nilainya Berulang Berturut-turut

Walau bagaimanapun, matlamat yang dipertingkatkan adalah untuk mengalih keluar keseluruhan elemen yang nilainya berulang berturut-turut, menghasilkan output seperti [2, 3, 5, 1, 2]. Pendekatan sebelumnya boleh diubah suai:

list = [1,1,1,1,1,1,2,3,4,4,5,1,2]
i = 0
dupe = False

while i < len(list)-1:
    if list[i] == list[i+1]:
        del list[i]
        dupe = True
    elif dupe:
        del list[i]
        dupe = False
    else:
        i += 1
Salin selepas log masuk

Walaupun berfungsi, pendekatan ini boleh dipermudahkan.

Penyelesaian yang Lebih Elegan

Python menyediakan lebih banyak alat ekspresif untuk manipulasi senarai. Menggunakan itertools.groupby:

L = [1,1,1,1,1,1,2,3,4,4,5,1,2]
from itertools import groupby
[key for key, _group in groupby(L)]
Salin selepas log masuk

Ini menghasilkan output yang diingini: [1, 2, 3, 4, 5, 1, 2].

Untuk bahagian kedua tugasan:

[k for k, g in groupby(L) if len(list(g)) < 2]
Salin selepas log masuk

Ini menggunakan groupby untuk mengumpulkan pendua berturut-turut dan menapis kumpulan yang mempunyai lebih daripada satu elemen, mengalih keluar elemen pendua dengan berkesan.

Jika mahu, anda boleh mengelak daripada membuat senarai sementara dengan menggunakan ungkapan penjana:

[k for k, g in groupby(L) if sum(1 for i in g) < 2]
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengeluarkan Elemen Pendua Berturut-turut dengan Cekap daripada Senarai Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan