Serpientes y rubíes

Este post fue migrado de un blog hecho con Wordpress. Si se ve mal, dejame un comentario y lo arreglo.

Ja! Levanto el guante del desafío que plantea Gastón en su blog:

juanjo@albus:~$ python

Python 2.5.1 (r251:54863, Mar 7 2008, 03:41:45)

[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

1. Dado un array con nombres de persona eliminar los nombre que comienzan con “Pe”:
>>> nombres = ['Pablo', 'Raul', 'Pedro', 'Pepe', 'Ariel', 'TerePe']

>>> [n for n in nombres if not n.startswith("Pe")]

['Pablo', 'Raul', 'Ariel', 'TerePe']

  1. Verificar si el mismo array contiene el nombre “Raul”:
>>> "Raul" in nombres

True

  1. Generar un string con todos los nombres unidos por “-”:
>>> "-".join(nombres)

'Pablo-Raul-Pedro-Pepe-Ariel-TerePe'

  1. Generar un segundo array con los nombres todos en minúsculas ordenado alfabéticamente:
>> sorted([n.lower() for n in nombres])

['ariel', 'pablo', 'pedro', 'pepe', 'raul', 'terepe']

  1. Desordenar el array:
>>> from random import shuffle

>>> shuffle(nombres)

>>> nombres

['Pepe', 'Pedro', 'Ariel', 'Raul', 'Pablo', 'TerePe']

  1. Averiguar si la lista siguiente tiene números pares:
>>> bool([n for n in numeros if n % 2 == 0])

True

  1. Averiguar si toda la lista son números pares:
>>> len(numeros) == len([n for n in numeros if n % 2 == 0])

False

  1. Obtener el producto de una lista de números:
>>> f = lambda x,y: x*y

>>> reduce(f, numeros)

120

  1. Obtener el factorial de 9999:
>>> reduce(f, xrange(1, 10000))

# la respuesta tiene 35656 caracteres.

  1. Averiguar si dos arrays son iguales:
>>> [1,2,3,4] == [1,2,3,4]

True

¿Conclusiones? Creo que las listas por comprensión de la serpiente le gana a los .metodos del rubí. Pero en 6 y 7 perdemos feo :-/ ¿Algún pythonista que reescriba esos ejercicios?

Comentarios