तो, सीपीथन (2.4) में कुछ रोचक व्यवहार होता है जब कुछ की लंबाई 1 < < 32 (एक int का आकार) के करीब होती है।पाइथन, लेन, और इनट्स का आकार
r = xrange(1<<30)
assert len(r) == 1<<30
ठीक है, लेकिन:
r = xrange(1<<32)
assert len(r) == 1<<32
ValueError: xrange object size cannot be reported`__len__() should return 0 <= outcome
एलेक्स के wowrange इस व्यवहार भी है। wowrange(1<<32).l
ठीक है, लेकिन len(wowrange(1<<32))
खराब है। मुझे लगता है कि यहां कुछ चलने वाले बिंदु व्यवहार (नकारात्मक के रूप में पढ़ा जा रहा है) कार्रवाई चल रही है।
- वास्तव में यहाँ क्या हो रहा है क्या? (यह नीचे बहुत अच्छी तरह से हल किया गया है!)
- मैं इसके आसपास कैसे हो सकता हूं? लंबे समय तक?
(मेरे विशिष्ट अनुप्रयोग random.sample(xrange(1<<32),ABUNCH))
अगर लोगों को सीधे उस प्रश्न को सुलझाने के लिए चाहते है!)
@Gregg, मजाकिया है कि मुझे ValueError के बजाय ओवरफ्लो त्रुटि मिलती है (जैसा कि स्वीकृत ए को उस क्यू में है), लेकिन, कम से कम। समस्या यह है कि, आपके विशिष्ट एप्लिकेशन के लिए, आप एक 'random.sample' चाहते हैं जो स्मृति में फिट नहीं हो सकता है - लेकिन प्रत्येक पायथन संरचना ** ** स्मृति में फिट होना चाहिए। यदि आप एक और क्यू खोलते हैं और पैरामीटर को अधिक विस्तार से निर्दिष्ट करते हैं तो शायद यह विशिष्ट व्यावहारिक सहायता प्रदान करने के लिए अधिक व्यावहारिक है ... –
@Alex, वास्तव में, नमूना को स्मृति में फिट नहीं होना चाहिए, लेकिन 2.4 में (मुझे पता है, पुरानी खबर!) यादृच्छिक मॉड्यूल, यह एक लेन() कॉल करता है जो विफल रहता है! xrange (1 << 32) स्वयं ठीक है, लेकिन कॉल: एन = लेन (जनसंख्या) मॉड्यूल के 29 9 पर नहीं है। –
'random.sample' को पायथन 2.5, 2.6, 3.0 और 3.1 में भी लैन()' कॉल करने की आवश्यकता है, और यह कॉल प्रत्येक संस्करण में 'xrange (1 << 32)' पर विफल रहता है (क्योंकि 'len() 'केवल उन कंटेनरों पर लागू होता है जो "स्मृति में फिट" होते हैं और' xrange' अवधारणात्मक रूप से नहीं)। तो यदि आप बेहतर निर्दिष्ट करते हैं कि आपको वास्तव में क्या चाहिए, तो esp। 'ABUNCH' के लिए एक सामान्य मूल्य क्या है, हम सुझाव दे सकते हैं कि' random.sample' की इस सीमा के आसपास कैसे काम करें (जो आसपास के _all_ पायथन संस्करणों पर लागू होता है!)। एक अलग क्यू, आईएमएचओ में बेहतर प्रदर्शन किया। –