Finisco spesso a scrivere un po 'di codice due volte quando si usano i loop. Per esempio, mentre andando oltre il corso di informatica Udacity, ho scritto il codice (per una funzione per trovare l'elemento più in sequenza ripetuta):Evitando la ripetizione del codice dopo il ciclo?
def longest_repetition(l):
if not l:
return None
most_reps = count = 0
longest = prv = None
for i in l:
if i == prv:
count += 1
else:
if count > most_reps:
longest = prv
most_reps = count
count = 1
prv = i
if count > most_reps:
longest = prv
return longest
In questo caso, sto controllando due volte se il conteggio è maggiore rispetto all'elemento precedentemente più ripetuto. Questo accade sia quando l'elemento corrente è diverso dall'ultimo e quando ho raggiunto la fine dell'elenco.
Ho anche incontrato alcune volte quando analizzo una stringa carattere per carattere. Ci sono state anche alcune volte in cui è stato applicato a circa 5 linee di codice. È comune o è il risultato del modo in cui penso/codice. Cosa dovrei fare?
edit: Allo stesso modo, in una artificiosa esempio stringa di scissione:
def split_by(string, delimeter):
rtn = []
tmp = ''
for i in string:
if i == delimeter:
if tmp != '':
rtn.append(tmp)
tmp = ''
else:
tmp += i
if tmp != '':
rtn.append(tmp)
return rtn
edit: L'esame di questo è stato da stato scritto per gli studenti del corso che non sono tenuti ad avere alcuna conoscenza al di fuori di Python; solo ciò che è stato insegnato nelle unità precedenti. Sebbene io abbia una precedente esperienza in Python, sto cercando di rispettare queste restrizioni per ottenere il massimo dal corso. Cose come str.split, elenchi e molti dei fondamenti di Python sono stati insegnati, ma nulla ancora sulle importazioni - specialmente non cose come groupby. Detto questo, come dovrebbe essere scritto senza nessuna delle caratteristiche linguistiche che probabilmente non verrebbero insegnate in un corso introduttivo di programmazione.
per favore, usa 'se some_string:' per verificare che 'some_string' non sia vuoto – jfs
' se non l' è ridondante. 'l' è un brutto nome. 'most_reps' potrebbe essere chiamato' max_count' per chiarire la relazione con 'count'. 'i' ->' current', 'prv' ->' last' – jfs