Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Sort by Extension by parfenov1976
from typing import List
import re
def sort_by_ext(files: List[str]) -> List[str]:
i = 0 # counter for index
for el in files:
ext = re.search(r'\b[.][\w]{1,4}$', el).group() if re.search(r'\b[.][\w]{1,4}$', el) is not None else '' # extention isolation
name = re.sub(r'\b[.][\w]{1,4}$', '', el) # name isolation
files[i] = [name, ext] # creating list with separated names and extentions
i += 1
files.sort(key=lambda x: x[0]) # sort by name
files.sort(key=lambda x: x[1]) # sort by extention
return [''.join(el) for el in files] # join names and extentions and return with list
if __name__ == '__main__':
print("Example:")
print(sort_by_ext(['1.cad', '1.bat', '1.aa', '.config', 'config.', 'table.imp.xls', '.imp.xlser.xls', '.xls', 'com.', 'exe']))
# These "asserts" are used for self-checking and not for an auto-testing
assert sort_by_ext(['1.cad', '1.bat', '1.aa']) == ['1.aa', '1.bat', '1.cad']
assert sort_by_ext(['1.cad', '1.bat', '1.aa', '2.bat']) == ['1.aa', '1.bat', '2.bat', '1.cad']
assert sort_by_ext(['1.cad', '1.bat', '1.aa', '.bat']) == ['.bat', '1.aa', '1.bat', '1.cad']
assert sort_by_ext(['1.cad', '1.bat', '.aa', '.bat']) == ['.aa', '.bat', '1.bat', '1.cad']
assert sort_by_ext(['1.cad', '1.', '1.aa']) == ['1.', '1.aa', '1.cad']
assert sort_by_ext(['1.cad', '1.bat', '1.aa', '1.aa.doc']) == ['1.aa', '1.bat', '1.cad', '1.aa.doc']
assert sort_by_ext(['1.cad', '1.bat', '1.aa', '.aa.doc']) == ['1.aa', '1.bat', '1.cad', '.aa.doc']
print("Coding complete? Click 'Check' to earn cool rewards!")
Sept. 1, 2021