Articles of Itertools

Comportamiento inesperado de itertools.groupby

Este es el comportamiento observado: In [4]: x = itertools.groupby(range(10), lambda x: True) In [5]: y = next(x) In [6]: next(x) ————————————————————————— StopIteration Traceback (most recent call last) in () —-> 1 next(x) StopIteration: In [7]: y Out[7]: (True, ) In [8]: list(y[1]) Out[8]: [9] La salida esperada de la list(y[1]) es [0,1,2,3,4,5,6,7,8,9] ¿Que está […]

izip_longest en itertools: ¿qué está pasando aquí?

Estoy luchando para entender cómo funciona el siguiente código. Es de http://docs.python.org/library/itertools.html#itertools.izip_longest , y es el equivalente en python puro del izip_longest iterator. Estoy especialmente desconcertado por la función centinela, ¿cómo funciona? def izip_longest(*args, **kwds): # izip_longest(‘ABCD’, ‘xy’, fillvalue=’-‘) –> Ax By C- D- fillvalue = kwds.get(‘fillvalue’) def sentinel(counter = ([fillvalue]*(len(args)-1)).pop): yield counter() # yields […]

Identificar sucesos consecutivos de un valor.

Tengo un df como asi: Count 1 0 1 1 0 0 1 1 1 0 y quiero devolver un 1 en una nueva columna si hay dos o más ocurrencias consecutivas de 1 en Count y un 0 si no lo hay. Por lo tanto, en la nueva columna, cada fila obtendrá un 1 […]

Cómo transmitir y manipular un archivo de datos de gran tamaño en Python

Tengo un archivo de texto relativamente grande (1 GB) que quiero reducir en tamaño sumndo las categorías: Geography AgeGroup Gender Race Count County1 1 M 1 12 County1 2 M 1 3 County1 2 M 2 0 A: Geography Count County1 15 County2 23 Esto sería una cuestión simple si todo el archivo pudiera caber […]

Separando una cadena

Dada una cadena, quiero generar todas las combinaciones posibles. En otras palabras, todas las formas posibles de poner una coma en algún lugar de la cadena. Por ejemplo: input: [“abcd”] output: [“abcd”] [“abc”,”d”] [“ab”,”cd”] [“ab”,”c”,”d”] [“a”,”bc”,”d”] [“a”,”b”,”cd”] [“a”,”bcd”] [“a”,”b”,”c”,”d”] Estoy un poco atascado en cómo generar todas las listas posibles. Las combinaciones solo me darán […]

Python itertools.product reordenar la generación.

Tengo esto: shape = (2, 4) # arbitrary, could be 3 dimensions such as (3, 5, 7), etc… for i in itertools.product(*(range(x) for x in shape)): print(i) # output: (0, 0) (0, 1) (0, 2) (0, 3) (1, 0) (1, 1) (1, 2) (1, 3) Hasta ahora, bien, itertools.product avanza el elemento más a la […]

Lista de grupos de tuplas por elemento

Tengo esta lista como ejemplo: [(148, Decimal(‘3.0’)), (325, Decimal(‘3.0’)), (148, Decimal(‘2.0’)), (183, Decimal(‘1.0’)), (308, Decimal(‘1.0’)), (530, Decimal(‘1.0’)), (594, Decimal(‘1.0’)), (686, Decimal(‘1.0’)), (756, Decimal(‘1.0’)), (806, Decimal(‘1.0’))] Ahora quiero agrupar por el ID, así que itemgetter(0) : import operator, itertools from decimal import * test=[(148, Decimal(‘3.0’)), (325, Decimal(‘3.0’)), (148, Decimal(‘2.0’)), (183, Decimal(‘1.0’)), (308, Decimal(‘1.0’)), (530, Decimal(‘1.0’)), (594, […]

itertools.product más lento que nested para bucles

Estoy intentando usar la función itertools.product para hacer que un segmento de mi código (en un simulador de patrón isotópico) sea más fácil de leer y, con suerte, más rápido (la documentación indica que no se crean resultados intermedios), sin embargo, he probado ambas versiones de el código entre sí utiliza la biblioteca cProfiling y […]

¿Cómo construir bloques de construcción “vectorizados” usando el módulo itertools?

La sección de itertools documentos de itertools comienza con este texto: Las herramientas extendidas ofrecen el mismo alto rendimiento que el conjunto de herramientas subyacente. El rendimiento superior de la memoria se mantiene al procesar los elementos uno a la vez en lugar de llevar todo el iterable a la memoria de una vez. El […]

Agrupe y combine elementos de listas de múltiples columnas con itertools / more-itertools en Python

Este código: from itertools import groupby, count L = [38, 98, 110, 111, 112, 120, 121, 898] groups = groupby(L, key=lambda item, c=count():item-next(c)) tmp = [list(g) for k, g in groups] Toma [38, 98, 110, 111, 112, 120, 121, 898] , lo agrupa por números consecutivos y los combina con esta salida final: [’38’, ’98’, […]