Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana Mengisih Rentetan yang Mengandungi Nombor Secara Semulajadi dalam Python?

Bagaimana Mengisih Rentetan yang Mengandungi Nombor Secara Semulajadi dalam Python?

DDD
Lepaskan: 2024-11-30 01:46:10
asal
512 orang telah melayarinya

How to Sort Strings Containing Numbers Naturally in Python?

Mengisih Rentetan dengan Nombor Terbenam

Apabila berurusan dengan rentetan yang mengandungi nombor, menyusunnya mengikut abjad mungkin tidak menghasilkan hasil yang diingini. Untuk mengisih rentetan sedemikian dengan betul, anda perlu mempertimbangkan kedua-dua komponen teks dan berangka.

Isih Manusia (Isih Semulajadi)

Isih semulajadi, juga dikenali sebagai isihan manusia, ialah teknik yang digunakan untuk menyusun item dengan cara yang konsisten dengan cara manusia melihatnya. Pendekatan ini melibatkan mengekstrak nombor daripada rentetan dan kemudian mengisihnya berdasarkan nilai berangkanya.

Dalam Python, anda boleh melaksanakan pengisihan semula jadi menggunakan kekunci isihan tersuai berikut:

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

Ini fungsi membahagikan rentetan kepada aksara dan nombor dan kemudian menukar aksara berangka kepada integer. Senarai diisih diperoleh dengan memanggil fungsi sort() dengan kunci tersuai ini:

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

Outputnya ialah:

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

Isih Rentetan dengan Terapung

Jika rentetan anda mengandungi nombor titik terapung, anda boleh mengubah suai kekunci pengisihan semula jadi untuk mengekstrak dan menukar kepada terapung menggunakan regex berikut:

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

Kunci diubah suai ini membolehkan anda mengisih rentetan dengan nombor titik terapung juga:

alist = ["something1", "something2", "something1.0", "something1.25", "something1.105"]
alist.sort(key=natural_keys)
print(alist)
Salin selepas log masuk

Outputnya ialah:

['something1', 'something1.0', 'something1.105', 'something1.25', 'something2']
Salin selepas log masuk

Dengan menggunakan teknik pengisihan manusia, anda boleh mengisih rentetan dengan nombor terbenam dengan cekap dengan cara yang sejajar dengan manusia gerak hati.

Atas ialah kandungan terperinci Bagaimana Mengisih Rentetan yang Mengandungi Nombor Secara Semulajadi 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan