Entonces, cPython (2.4) tiene un comportamiento interesante cuando la longitud de algo se acerca a 1 < < 32 (el tamaño de un int).Python, len y tamaño de ints
r = xrange(1<<30)
assert len(r) == 1<<30
está bien, pero:
r = xrange(1<<32)
assert len(r) == 1<<32
ValueError: xrange object size cannot be reported`__len__() should return 0 <= outcome
de Alex wowrange tiene este comportamiento también. wowrange(1<<32).l
está bien, pero len(wowrange(1<<32))
es malo. Supongo que hay algo de comportamiento de punto flotante (que se lee como negativo) que está ocurriendo aquí.
- ¿Qué está pasando exactamente aquí? (¡Esto está bastante bien resuelto a continuación!)
- ¿Cómo puedo evitarlo? Longs?
(Mi aplicación específica es random.sample(xrange(1<<32),ABUNCH))
si la gente quiere hacer frente a esa pregunta directamente!)
@Gregg, lo suficientemente gracioso obtengo OverflowError en lugar de ValueError (como lo hace la A aceptada a esa Q), pero, de minimis. El problema es que, para su aplicación específica, desea un 'random.sample' que no cabe en la memoria, pero cada estructura de Python ** debe ** encajar en la memoria. Si abre otra Q y especifica los parámetros con más detalle quizás sea más práctico ofrecer ayuda con la aplicación específica ... –
@Alex, en realidad, la muestra no tiene que caber en la memoria, sino en 2.4 (lo sé, ¡noticias viejas!) módulo aleatorio, ¡hace una llamada len() que falla! xrange (1 << 32) en sí mismo está bien, pero la llamada: n = len (población) en 299 del módulo no lo está. –
'random.sample' necesita' llamar a len() 'en Python 2.5, 2.6, 3.0 y 3.1 también, y esa llamada falla en' xrange (1 << 32) 'en cada versión (desde' len() 'solo se aplica a contenedores que" caben en la memoria "y que' xrange' conceptualmente no). Entonces, si especifica mejor qué es exactamente lo que necesita, esp. ¿Cuál es el valor típico de 'ABUNCH', podemos sugerir cómo evitar esta limitación de 'random.sample' (que se aplica a _todas las versiones de Python alrededor de! -). Mejor hecho en una Q diferente, en mi humilde opinión. –