A menudo termino escribiendo un poco de código dos veces cuando uso un bucle. Por ejemplo, mientras que va a lo largo de la informática Udacity, escribí el código (para una función para encontrar el elemento que más se repite secuencialmente):¿Evitar la repetición del código después del bucle?
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
En este caso, estoy comprobando dos veces si el recuento es mayor que el elemento previamente más repetido. Esto sucede tanto cuando el elemento actual es diferente al último como cuando llegué al final de la lista.
También me he encontrado con esto algunas veces al analizar una cadena carácter por carácter. También ha habido algunas veces en las que ha habido hasta 5 líneas de código. Es esto común, o un resultado de la forma en que creo/código. ¿Que debería hacer?
edición: Del mismo modo, en un ejemplo de cadena artificiosa división:
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
edición: El examen se trataba de que fue escrito para los estudiantes del curso que no se espera que tenga ningún conocimiento fuera de Python; solo lo que se enseñó en las unidades anteriores. Aunque tengo experiencia previa en Python, intento cumplir con estas restricciones para aprovechar al máximo el curso. Se enseñaron cosas como str.split, listas y muchos de los fundamentos de Python, pero todavía nada sobre las importaciones, especialmente cosas como groupby. Dicho esto, ¿cómo debería escribirse sin ninguna de las características del lenguaje que probablemente no se enseñarían en un curso de introducción a la programación?
por favor, use 'if some_string:' para verificar que 'some_string' no esté vacío – jfs
' if not l' is redundant. 'l' es un mal nombre. 'most_reps' podría llamarse' max_count' para aclarar la relación con 'count'. 'i' ->' current', 'prv' ->' last' – jfs