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
505 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!

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