Często kończę pisanie trochę kodu dwa razy podczas korzystania z pętli. Na przykład, podczas przechodzenia na witrynie Udacity informatyki oczywiście, napisałem kod (dla funkcji, aby znaleźć najbardziej sekwencyjnie powtarzany element):Unikanie powtórzenia kodu po pętli?
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
W tym przypadku, mam sprawdzanie dwukrotnie jeśli liczba jest większa niż poprzednio najbardziej powtarzany element. Dzieje się tak zarówno wtedy, gdy bieżący element różni się od ostatniego, jak i po osiągnięciu końca listy.
Zdarzyło mi się to również kilka razy podczas analizowania łańcucha znaków według znaków. Było też kilka razy, gdy było to około 5 linii kodu. Czy jest to powszechne, czy też wynikiem sposobu w jaki myślę/kod. Co powinienem zrobić?
edit: Podobnie w contrived przykład rozłupywania ciąg:
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: Egzamin ten pochodził został napisany dla studentów, którzy oczywiście nie oczekuje się żadnego zewnętrznego znajomość Pythona; tylko to, czego nauczono w poprzednich jednostkach. Chociaż mam wcześniejsze doświadczenia w Pythonie, staram się przestrzegać tych ograniczeń, aby jak najlepiej wykorzystać kurs. Takie rzeczy jak str.split, listy i wiele podstaw Pythona były nauczane, ale jeszcze nic na import - w szczególności nie takie rzeczy jak groupby. Biorąc to pod uwagę, jak to powinno być napisane bez żadnych cech językowych, które prawdopodobnie nie byłyby nauczane w kursie wprowadzającym do programowania.
proszę użyć 'jeśli some_string:' 'aby sprawdzić, czy nie jest pusta some_string' – jfs
' jeśli nie l' jest zbędny. 'l' jest złą nazwą. 'most_reps' może być nazywane' max_count', aby wyjaśnić związek z 'count'. 'i' ->' current', 'prv' ->' last' – jfs