Python - Librería Itertools

#39 Ejemplos en Python usando la librería itertools.[br][br]#1. Combinaciones de una lista de elementos:[br]import itertools[br]lista = [1, 2, 3][br]combinaciones = itertools.combinations(lista, 2)[br]print(list(combinaciones)) # Salida: [(1, 2), (1, 3), (2, 3)][br][br]#2. Permutaciones de una lista de elementos:[br]import itertools[br]lista = [1, 2, 3][br]permutaciones = itertools.permutations(lista)[br]print(list(permutaciones))[br]# Salida: [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)][br][br]#3. Productos cartesianos de dos listas:[br]import itertools[br]lista1 = [1, 2][br]lista2 = ['a', 'b'][br]productos = itertools.product(lista1, lista2)[br]print(list(productos))[br]# Salida: [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')][br][br]#4. Combinaciones con repetición de una lista de elementos:[br]import itertools[br]lista = [1, 2, 3][br]combinaciones = itertools.combinations_with_replacement(lista, 2)[br]print(list(combinaciones))[br]# Salida: [(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)][br][br]#5. Cadenas de elementos repetidos:[br]import itertools[br]cadena = itertools.repeat('Hola', 3)[br]print(list(cadena))[br]# Salida: ['Hola', 'Hola', 'Hola'][br][br]#6. Elementos de una lista agrupados en tuplas de tamaño fijo:[br]import itertools[br]lista = [1, 2, 3, 4, 5, 6][br]grupos = itertools.zip_longest(*[iter(lista)]*3)[br]print(list(grupos))[br]# Salida: [(1, 2, 3), (4, 5, 6)][br][br]#7. Elementos de una lista agrupados en tuplas de tamaño variable:[br]import itertools[br]lista = [1, 2, 3, 4, 5, 6][br]grupos = itertools.zip_longest(*[iter(lista)]*2, fillvalue=None)[br]print(list(grupos))[br]# Salida: [(1, 2), (3, 4), (5, 6)][br][br]#8. Elementos de una lista agrupados en sublistas de tamaño fijo:[br]import itertools[br]lista = [1, 2, 3, 4, 5, 6][br]grupos = [list(g) for g in itertools.zip_longest(*[iter(lista)]*3, fillvalue=None)][br]print(grupos)[br]# Salida: [[1, 2, 3], [4, 5, 6]][br][br]#9. Elementos de una lista agrupados en sublistas de tamaño variable:[br]import itertools[br]lista = [1, 2, 3, 4, 5, 6][br]grupos = [list(g) for g in itertools.zip_longest(*[iter(lista)]*2, fillvalue=None)][br]print(grupos)[br]# Salida: [[1, 2], [3, 4], [5, 6]][br][br]#10. Elementos de una lista agrupados en sublistas [br]#de tamaño variable con una condición:[br]import itertools[br]lista = [1, 2, 3, 4, 5, 6][br]grupos = [list(g) for k, g in itertools.groupby(lista, lambda x: x % 2 == 0) if not k][br]print(grupos)[br]# Salida: [[1], [3], [5]][br][br]#11. Elementos de una lista agrupados en sublistas [br]#de tamaño variable con una función de agrupación:[br]import itertools[br]lista = [1, 2, 3, 4, 5, 6][br]grupos = [list(g) for k, g in itertools.groupby(lista, lambda x: x < 4)][br]print(grupos)[br]# Salida: [[1, 2, 3], [4, 5, 6]][br][br]#12. Elementos de una lista agrupados en sublistas de tamaño variable [br]#con una función de agrupación y ordenados:[br]import itertools[br]lista = [1, 2, 3, 4, 5, 6][br]grupos = [list(g) for k, g in itertools.groupby(sorted(lista), lambda x: x < 4)][br]print(grupos)[br]# Salida: [[1, 2, 3], [4, 5, 6]][br][br]#13. Elementos de una lista agrupados en sublistas [br]#de tamaño variable con una función de agrupación y ordenados inversamente:[br]import itertools[br]lista = [1, 2, 3, 4, 5, 6][br]grupos = [list(g) for k, g in itertools.groupby(sorted(lista, reverse=True), lambda x: x > 3)][br]print(grupos)[br]# Salida: [[6, 5, 4], [3, 2, 1]][br][br]#14. Elementos de una lista agrupados en sublistas [br]#de tamaño variable con una función de agrupación y ordenados por longitud:[br]import itertools[br]lista = [[1, 2], [3, 4, 5], [6, 7, 8, 9], [10, 11]][br]grupos = [list(g) for k, g in itertools.groupby(sorted(lista, key=len), lambda x: len(x) < 4)][br]print(grupos)[br]# Salida: [[[1, 2], [10, 11], [3, 4, 5]], [[6, 7, 8, 9]]][br][br]#15. Elementos de una lista agrupados en sublistas [br]#de tamaño variable con una función de agrupación [br]#y ordenados por la suma de sus elementos:[br]import itertools[br]lista = [[1, 2], [3, 4, 5], [6, 7, 8, 9], [10, 11]][br]grupos = [list(g) for k, g in itertools.groupby(sorted(lista, key=sum), lambda x: sum(x) < 15)][br]print(grupos)[br]# Salida: [[[1, 2], [3, 4, 5]], [[10, 11], [6, 7, 8, 9]]][br][br]#16. Elementos de una lista agrupados en sublistas [br]#de tamaño variable con una función de agrupación [br]#y ordenados por la media de sus elementos:[br]import itertools[br]lista = [[1, 2], [3, 4, 5], [6, 7, 8, 9], [10, 11]][br]grupos = [list(g) for k, g in itertools.groupby(sorted(lista, key=lambda x: sum(x)/len(x)), lambda x: sum(x)/len(x) < 6)][br]print(grupos)[br]# Salida: [[[1, 2], [3, 4, 5]], [[6, 7, 8, 9], [10, 11]]][br][br]#17. Combinaciones de elementos:[br]from itertools import combinations[br]lista = ['a', 'b', 'c'][br]combinaciones = list(combinations(lista, 2))[br]print(combinaciones)[br]# Salida: [('a', 'b'), ('a', 'c'), ('b', 'c')][br][br]#18. Permutaciones de elementos:[br]from itertools import permutations[br]lista = ['a', 'b', 'c'][br]permutaciones = list(permutations(lista))[br]print(permutaciones)[br]# Salida: [('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')][br][br]#19. Productos cartesianos:[br]from itertools import product[br]lista1 = ['a', 'b'][br]lista2 = [1, 2][br]productos = list(product(lista1, lista2))[br]print(productos)[br]# Salida: [('a', 1), ('a', 2), ('b', 1), ('b', 2)][br][br]#20. Combinaciones con repetición:[br]from itertools import combinations_with_replacement[br]lista = ['a', 'b'][br]combinaciones = list(combinations_with_replacement(lista, 3))[br]print(combinaciones)[br]# Salida: [('a', 'a', 'a'), ('a', 'a', 'b'), ('a', 'b', 'b'), ('b', 'b', 'b')][br][br]#21. Agrupación de elementos:[br]from itertools import zip_longest[br]lista1 = ['a', 'b', 'c'][br]lista2 = [1, 2][br]agrupacion = list(zip_longest(lista1, lista2))[br]print(agrupacion)[br]# Salida: [('a', 1), ('b', 2), ('c', None)][br][br]#22. accumulate: devuelve una lista acumulativa de los elementos en una secuencia.[br]import itertools[br]seq = [1, 2, 3, 4, 5][br]result = itertools.accumulate(seq)[br]print(list(result)) [br]# Salida: [1, 3, 6, 10, 15][br][br]#23. chain: combina varias secuencias en una sola secuencia.[br]import itertools[br]seq1 = [1, 2, 3][br]seq2 = [4, 5, 6][br]result = itertools.chain(seq1, seq2)[br]print(list(result)) [br]# Salida: [1, 2, 3, 4, 5, 6][br][br]#24. compress: filtra los elementos de una secuencia según otra secuencia booleana.[br]import itertools[br]seq = ['a', 'b', 'c', 'd', 'e'][br]selector = [True, False, True, False, True][br]result = itertools.compress(seq, selector)[br]print(list(result)) [br]# Salida: ['a', 'c', 'e'][br][br]#25. count: devuelve un iterador que produce valores consecutivos empezando por un número dado.[br]import itertools[br]result = itertools.count(10)[br]print(next(result)) # Salida: 10[br]print(next(result)) # Salida: 11[br]x = itertools.count(start=0, step=2)[br]print(next(x)) # Salida: 0[br]print(next(x)) # Salida: 2[br]print(next(x)) # Salida: 4[br][br]#26. cycle: devuelve un iterador que repite indefinidamente los elementos de una secuencia.[br]import itertools[br]seq = ['a', 'b', 'c'][br]result = itertools.cycle(seq)[br]print(next(result)) # Salida: 'a'[br]print(next(result)) # Salida: 'b'[br]print(next(result)) # Salida: 'c'[br]print(next(result)) # Salida: 'a'[br]x = [1, 2, 3][br]y = itertools.cycle(x)[br]print(next(y)) # Salida: 1[br]print(next(y)) # Salida: 2[br]print(next(y)) # Salida: 3[br]print(next(y)) # Salida: 1[br][br]#27. dropwhile: devuelve los elementos de una secuencia después de que una función dada sea falsa para el primer elemento.[br]import itertools[br]seq = [1, 3, 5, 7, 4, 6][br]result = itertools.dropwhile(lambda x: x % 2 != 0, seq)[br]print(list(result)) [br]# Salida: [4, 6][br]x = [1, 3, 5, 7, 9, 2, 4, 6, 8, 10][br]y = itertools.dropwhile(lambda i: i < 5, x)[br]print(list(y)) [br]# Salida: [5, 7, 9, 2, 4, 6, 8, 10][br][br]#28. filterfalse: devuelve los elementos de una secuencia para los cuales una función dada devuelve False.[br]import itertools[br]seq = [1, 2, 3, 4, 5][br]result = itertools.filterfalse(lambda x: x % 2 == 0, seq)[br]print(list(result)) [br]# Salida: [1, 3, 5][br]x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10][br]y = itertools.filterfalse(lambda i: i % 2 == 0, x)[br]print(list(y)) [br]# Salida: [1, 3, 5, 7, 9][br][br]#29. islice: devuelve un iterador que produce una selección de elementos de una secuencia.[br]import itertools[br]seq = [1, 2, 3, 4, 5][br]result = itertools.islice(seq, 1, None)[br]print(list(result)) [br]# Salida: [2, 3, 4, 5][br]x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10][br]y = itertools.islice(x, 2, 7, 2)[br]print(list(y)) [br]# Salida: [3, 5, 7][br][br]#30. starmap: aplica una función a cada elemento de una secuencia de tuplas.[br]import itertools[br]seq = [(1,2), (3,4), (5,6)][br]result = itertools.starmap(lambda x,y: x+y, seq)[br]print(list(result)) [br]# Salida: [3, 7, 11][br]x = [(1, 2), (3, 4), (5, 6)][br]y = itertools.starmap(lambda x, y: x + y, x)[br]print(list(y)) [br]# Salida: [3, 7, 11][br][br]#31. takewhile: devuelve los elementos de una secuencia hasta que una función dada sea falsa para un elemento.[br]import itertools[br]seq = [1, 3, 5, 7, 4, 6][br]result = itertools.takewhile(lambda x: x % 2 != 0, seq)[br]print(list(result)) [br]# Salida: [1, 3, 5, 7][br]x = [1, 3, 5, 7, 9, 2, 4, 6, 8, 10][br]y = itertools.takewhile(lambda i: i < 5, x)[br]print(list(y)) [br]# Salida: [1, 3][br][br]#32. tee: devuelve varios iteradores independientes que producen los mismos valores.[br]#import itertools[br]#seq = [1, 2, 3, 4, 5][br]#result1, result2 = itertools.tee(seq)[br]#print(list(result1)) [br]## Salida: [1, 2, 3, 4, 5][br]#print(list(result2)) [br]## Salida: [1, 2, 3, 4, 5][br][br]#33. Elementos de una lista agrupados en sublistas [br]#de tamaño variable con una función de agrupación [br]#y ordenados por la desviación estándar de sus elementos:[br]#import itertools[br]#import statistics[br]#lista = [[1, 2], [3, 4, 5], [6, 7, 8, 9], [10, 11]][br]#grupos = [list(g) for k, g in itertools.groupby(sorted(lista, key=lambda x: statistics.stdev(x)), lambda x: statistics.stdev(x) < 3)][br]#print(grupos)[br][br]#34. Elementos de una lista agrupados en sublistas de tamaño variable [br]#con una función de agrupación y ordenados por la mediana de sus elementos:[br]#import itertools[br]#import statistics[br]#lista = [[1, 2], [3, 4, 5], [6, 7, 8, 9], [10, 11]][br]#grupos = [list(g) for k, g in itertools.groupby(sorted(lista, key=lambda x: statistics.median(x)), lambda x: statistics.median(x) < 6)][br]#print(grupos)[br][br]#35. Elementos de una lista agrupados en sublistas de tamaño variable [br]#con una función de agrupación y ordenados por la moda de sus elementos:[br]#import itertools[br]#import statistics[br]#lista = [[1, 2], [3, 4, 5], [6, 7, 8, 9], [10, 11]][br]#grupos = [list(g) for k, g in itertools.groupby(sorted(lista, key=lambda x: statistics.mode(x)), lambda x: statistics.mode(x) < 6)][br]#print(grupos)[br][br]#36. Elementos de una lista agrupados en sublistas de tamaño variable [br]#con una función de agrupación y ordenados por la varianza de sus elementos:[br]#import itertools[br]#import statistics[br]#lista = [[1, 2], [3, 4, 5], [6, 7, 8, 9], [10, 11]][br]#grupos = [list(g) for k, g in itertools.groupby(sorted(lista, key=lambda x: statistics.variance(x)), lambda x: statistics.variance(x) < 10)][br]#print(grupos)[br][br]#37. Usando los dígitos 0-9 sin ninguna repetición para rellena las casillas y crear dos prismas rectangulares con el mismo volumen[br]import itertools[br]a=itertools.permutations([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])[br]for x in a:[br] val = x[0] * (x[1]*10 +x[2]) * (x[3]*10 +x[4])[br] val2 = x[5] * (x[6]*10 +x[7]) * (x[8]*10 +x[9])[br] if val == val2 and x[1] != 0 and x[3] != 0 and x[6] != 0 and x[8] != 0:[br] print(x)[br][br]#38. Conjunto Potencia con Números[br]import itertools[br] def powerset(iterable):[br] return itertools.chain.from_iterable(itertools.combinations(iterable, i)[br] for i in range(len(iterable) + 1))[br][br]list(ConjuntoPotencia(range(3)))[br][br]#39. Conjunto Potencia con Letras[br]import itertools[br]def ConjuntoPotencia(secuencia):[br] for tamano in range(len(secuencia) + 1):[br] yield from itertools.combinations(secuencia, tamano)[br][br] for resultado in ConjuntoPotencia('abc'):[br] print(resultado)
Geogebra Python

Information: Python - Librería Itertools