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
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
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)]
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)
Output:
['something1', 'something2', 'something12', 'something17', 'something25', 'something29']
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)]
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!