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
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
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)]
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]
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]
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!