Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

373
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!