Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

372
Vistas
Cómo usar la instrucción IF ALL en Python

Tengo una función llamada checker(nums) que tiene un argumento que luego recibirá una lista. Lo que quiero hacer con esa lista es verificar si cada elemento es mayor o igual que el anterior. Ejemplo: tengo una lista [1, 1, 2, 2, 3] y tengo que verificar si cumple la condición. Como lo hace, la función debería devolver True

Mi código:

 def checker(nums): for x in range(len(nums)): if x+1<len(nums): if nums[x] <= nums[x+1] and nums[-1] >= nums[-2]: return True

Esto solo se ejecutará una vez y devolverá True si la primera condición es verdadera. He visto una declaración si todo y no estoy seguro de cómo usarla.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Su función se puede reducir a esto:

 def checker(nums): return all(i <= j for i, j in zip(nums, nums[1:]))

Tenga en cuenta lo siguiente:

  • zip recorre sus argumentos en paralelo, es decir, se recuperan nums[0] y nums[1] , luego nums[1] y nums[2] etc.
  • i <= j realiza la comparación real.
  • La expresión del generador denotada por paréntesis () asegura que cada valor de la condición, es decir, True o False , se extraiga uno a la vez. Esto se llama evaluación perezosa .
  • all simplemente comprueba que todos los valores son True . Una vez más, esto es perezoso. Si uno de los valores extraídos de forma perezosa de la expresión del generador es False , se produce un cortocircuito y devuelve False .

Alternativas

Para evitar el gasto de crear una lista para el segundo argumento de zip , puede usar itertools.islice . Esta opción es particularmente útil cuando su entrada es un iterador, es decir, no se puede dividir como una list .

 from itertools import islice def checker(nums): return all(i <= j for i, j in zip(nums, islice(nums, 1, None)))

Otra opción fácil de iterador es usar la receta de itertools pairwise , también disponible a través more_itertools.pairwise terceros:

 # from more_itertools import pairwise # 3rd party library alternative from itertools import tee def pairwise(iterable): "s -> (s0,s1), (s1,s2), (s2, s3), ..." a, b = tee(iterable) next(b, None) return zip(a, b) def checker(nums): return all(i <= j for i, j in pairwise(nums))

Otra alternativa es utilizar un enfoque funcional en lugar de una comprensión:

 from operator import le def checker_functional(nums): return all(map(le, nums, nums[1:]))
over 4 years ago · Santiago Trujillo Denunciar

0

De hecho, su código puede reducirse a verificar si los nums están ordenados, por ejemplo

 def checker(nums): return sorted(nums) == nums

Esto hace exactamente lo que esperas, por ejemplo

 >>> checker([1, 1, 2, 2, 3]) True >>> checker([1, 1, 2, 2, 1]) False
over 4 years ago · Santiago Trujillo Denunciar

0

Solución similar a @jp_data_analysis usando more_itertools.windowed

 >>> from more_itertools import windowed >>> nums = [1, 1, 2, 2, 3] >>> all(i <= j for i, j in windowed(nums, 2)) True

Y para fines científicos (código no recomendado), aquí hay un enfoque más funcional

 >>> from operator import le >>> from itertools import starmap >>> all(starmap(le, windowed(nums, 2))) True
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda