Skip to main content
Overview

[Programmers] Ordinamento nomi file

November 2, 2021
1 min read

https://programmers.co.kr/learn/courses/30/lessons/17686

Approccio 1

Bisogna dividere i nomi dei file in base ai caratteri numerici. Un modo è implementarlo manualmente:

number_list = [str(i) for i in range(10)]
for idx in range(len(files)):
head, number, tail = "", "", ""
number_idx, tail_idx = -1, -1
# Trovare l'indice di inizio della parte numerica
for j in range(len(files[idx])):
if files[idx][j] in number_list:
head = files[idx][:j]
# print(head)
number_idx = j
break
# Trovare l'indice di inizio della parte tail
for j in range(number_idx, len(files[idx])):
if files[idx][j] not in number_list:
number = int(files[idx][number_idx:j])
break
tail = files[idx][j:]
files[idx] = [head, number, tail]

A metà dell’implementazione mi sono ricordato delle regex. Dato che \d distingue le cifre, si può fare:

re.compile(r'(\d+)')

Dato che serve solo lo split, ho usato re.split.

Per l’ordinamento, basta passare la priorità alla funzione sort. Dato che si ordina solo per head e number, passo questa lambda come chiave di ordinamento:

lambda x: (x[0].lower(), int(x[1]))

Approccio 2

A quanto pare si potrebbe anche usare l’interfaccia Comparable di Java. In Python si implementerebbe __cmp__, anche se per questo problema non c’è un vero motivo. Potrebbe tornare utile se la logica di ordinamento fosse più complessa.

Codice

https://github.com/naem1023/codingTest/blob/master/sort/pg-30-17686.py

Loading comments...