Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
One liner - with explanation solution in Clear category for Sort by Extension by Pelmen323
from typing import List
def sort_by_ext(files: List[str]) -> List[str]:
return sorted(files, key= lambda x:(x[:x.rindex('.')+1] != '.' , x[x.rindex('.')+1:], x[:x.rindex('.')+1]))
# The returned list is sorted using 3 scenarios:
# 1. All the items with empty extension (no symbols before last dot) are moved to the list beginning - x[:x.rindex('.')+1] != '.'
# 2. Rest of the items are sorted by the symbols after the last dot - x[x.rindex('.')+1:]
# 3. If there are 2 items with the same extenstion, they are sorted by their name - x[:x.rindex('.')+1]
if __name__ == '__main__':
print("Example:")
print(sort_by_ext(['1.cad', '1.bat', '1.aa']))
# 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!")
Aug. 28, 2021