Natural Sort / Human Sort
इस प्रकार का Sort जिसमें आप String के अंदर Numbers के Basis पर Sort करना चाहते हैं, उसे Natural Sort या Human Sort कहते हैं।
उदाहरण
यदि आपके पास Text है:
['Hello1', 'Hello12', 'Hello29', 'Hello2', 'Hello17', 'Hello25']
तो आप Sorted List चाहते हैं:
['Hello1', 'Hello2', 'Hello12', 'Hello17', 'Hello25', 'Hello29']
न कि:
['Hello1', 'Hello12', 'Hello17', 'Hello2', 'Hello25', 'Hello29']
Solution: Custom Key Function के साथ Regex
import re
def atoi(text):
return int(text) if text.isdigit() else text
def natural_keys(text):
return [atoi(c) for c in re.split('(\d+)', text)]
my_list = ['Hello1', 'Hello12', 'Hello29', 'Hello2', 'Hello17', 'Hello25']
my_list.sort(key=natural_keys)
print(my_list)
Output:
['Hello1', 'Hello2', 'Hello12', 'Hello17', 'Hello25', 'Hello29']
How it Works:
re.split('(\d+)', text)- String को Digits और Non-digits में Split करता है, Digits को Groups में Keep करता हैatoi()- Digit Strings को Integers में Convert करता है, Non-digits को As-is रखता है- Resulting List को Sort Key के रूप में उपयोग करता है
Ready-to-use Function (natsort Library):
# pip install natsort from natsort import natsorted my_list = ['Hello1', 'Hello12', 'Hello29', 'Hello2', 'Hello17', 'Hello25'] print(natsorted(my_list))
Pathlib के साथ Files Sort करना:
from pathlib import Path
from natsort import natsorted
files = natsorted(Path('.').glob('*.txt'), key=lambda p: p.name)