Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Menyahduplikasi Senarai Senarai Dengan Cekap Semasa Mengekalkan Pesanan?

Bagaimanakah Saya Boleh Menyahduplikasi Senarai Senarai Dengan Cekap Semasa Mengekalkan Pesanan?

Barbara Streisand
Barbara Streisandasal
2024-11-23 15:24:25546semak imbas

How Can I Efficiently Deduplicate a List of Lists While Maintaining Order?

Mengalih Keluar Pendua daripada Senarai Senarai Dengan Cekap

Memandangkan senarai senarai, matlamatnya adalah untuk menghapuskan unsur pendua sambil mengekalkan ketenteraman. Walaupun menukar senarai kepada tupel kepada set leverage adalah mudah, ia tidak cekap.

Menggunakan itertools.groupby()

itertools menawarkan penyelesaian yang luar biasa:

import itertools

k.sort()
list(k for k,_ in itertools.groupby(k))

Pendekatan ini cemerlang dengan:

  • Mengisih senarai untuk menjajarkan pendua.
  • Menghimpunkan senarai berdasarkan elemen, dengan setiap kumpulan diwakili oleh kejadian pertamanya.
  • Menukar kekunci kumpulan (pendua dialih keluar) kembali kepada senarai.

Analisis Penanda Aras

Penanda aras yang meluas mendedahkan bahawa "berkumpulan" secara amnya mengatasi kaedah lain untuk senarai input yang besar. Walau bagaimanapun, untuk senarai kecil dengan beberapa pendua, pendekatan "gelung masuk" mungkin lebih pantas sedikit.

Mengoptimumkan untuk Aplikasi Tertentu

Apabila prestasi diutamakan, pertimbangkan:

  • Analisis Input Heuristik: Mengesan ciri input untuk membimbing algoritma pemilihan.
  • Struktur Data Alternatif: Menilai sama ada set tupel akan menjadi perwakilan yang lebih sesuai untuk data.
  • Pemodelan Kebarangkalian: Menganalisis pengagihan pendua untuk mengoptimumkan ukuran prestasi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyahduplikasi Senarai Senarai Dengan Cekap Semasa Mengekalkan Pesanan?. 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