Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Melaksanakan Pengisihan Semula Jadi untuk Rentetan yang Mengandungi Nombor dan Terapung dalam Python?

Bagaimanakah Saya Boleh Melaksanakan Pengisihan Semula Jadi untuk Rentetan yang Mengandungi Nombor dan Terapung dalam Python?

Mary-Kate Olsen
Lepaskan: 2024-12-02 08:54:09
asal
532 orang telah melayarinya

How Can I Implement Natural Sorting for Strings Containing Numbers and Floats in Python?

Isih Semulajadi untuk Rentetan dengan Nombor

Apabila mengisih rentetan yang mengandungi nombor, kaedah pengisihan lalai mungkin tidak menghasilkan hasil yang diingini. Sebagai contoh, rentetan "something12" mungkin diletakkan selepas "something2" dan bukannya sebelum itu.

Untuk membetulkannya, kita boleh menggunakan pengisihan semula jadi, yang mengambil kira nombor dalam rentetan. Begini caranya:

Mengimport Modul yang Diperlukan:

Pertama, kami mengimport modul semula untuk pengendalian ekspresi biasa.

import re
Salin selepas log masuk

Mentakrifkan Fungsi Pembantu:

Kami mentakrifkan fungsi pembantu untuk menukar rentetan kepada integer dan terapung:

def atoi(text):
    return int(text) if text.isdigit() else text

def atof(text):
    try:
        retval = float(text)
    except ValueError:
        retval = text
    return retval
Salin selepas log masuk

Mentakrifkan Fungsi Isih Semulajadi:

Fungsi natural_keys membahagi rentetan kepada bahagian konstituennya menggunakan ungkapan biasa:

def natural_keys(text):
    return [atoi(c) for c in re.split(r'(\d+)', text)]
Salin selepas log masuk

Isih dengan Semulajadi Kekunci:

Menggunakan fungsi natural_keys sebagai kunci untuk mengisih meletakkan rentetan dalam susunan semula jadi:

alist = ["something1", "something12", "something17", "something2", "something25", "something29"]
alist.sort(key=natural_keys)
print(alist)
Salin selepas log masuk

Output:

['something1', 'something2', 'something12', 'something17', 'something25', 'something29']
Salin selepas log masuk

Mengendalikan Terapung:

Untuk mengisih rentetan yang mengandungi terapung, ubah suai ungkapan biasa dalam natural_keys untuk memadankan terapung:

def natural_keys(text):
    return [atof(c) for c in re.split(r'[+-]?([0-9]+(?:[.][0-9]*)?|[.][0-9]+)', text)]
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Pengisihan Semula Jadi untuk Rentetan yang Mengandungi Nombor dan Terapung dalam 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