दिलचस्प पोस्ट
एमएस ऑफ़िस का स्थापित संस्करण कैसे पता लगा सकता है? PHP सत्र डिफ़ॉल्ट समयबाह्य शब्दकोश कुंजी के रूप में कस्टम प्रकार का उद्देश्य .XSD फ़ाइलों से जावा कक्षाएं उत्पन्न करें …? एक .py फ़ाइल पार्स करें, एएसटी पढ़ें, इसे संशोधित करें, फिर संशोधित स्रोत कोड को वापस लिखें Regex का उपयोग करने के बजाय स्ट्रिंग उत्पन्न करने के लिए उन्हें मैच प्रोग्राम लॉन्च करें जिनके मार्ग में रिक्त स्थान हैं रिलेशनल टेबल नामकरण सम्मेलन कैपेबरा के साथ: जेएस => सच का कारण परीक्षण विफल हो जाता है जावास्क्रिप्ट: जांचें कि क्या माउस बटन नीचे है? NSFetchRequest उदाहरण के लिए प्रकार कैसे लागू करें? एंड्रॉइड में प्रोग्राम संदेशों को टेक्स्ट भेजना C ++ प्रोग्राम में रोकें कंसोल स्ट्रैटस 2 में डायनामिक यूआरएल रीडायरेक्ट कैसे करें? शब्दकोश कुंजी में स्विचेस से ऐरे

पायथन 2. एक्स में रेंज और एक्सरेन्ज फ़ंक्शन के बीच अंतर क्या है?

जाहिरा तौर पर एक्सरेन्ज तेज है, लेकिन मुझे पता नहीं है कि यह तेज़ क्यों है (और वास्तविकता के अलावा अब तक कोई सबूत नहीं है कि यह तेज़ी से है) या इससे अलग क्या है

for i in range(0, 20): for i in xrange(0, 20): 

Solutions Collecting From Web of "पायथन 2. एक्स में रेंज और एक्सरेन्ज फ़ंक्शन के बीच अंतर क्या है?"

श्रेणी एक सूची बनाता है, इसलिए यदि आप range(1, 10000000) यह 9999999 तत्वों के साथ स्मृति में एक सूची बनाता है

xrange एक अनुक्रम ऑब्जेक्ट है जो xrange मूल्यांकन करता है।

श्रेणी एक सूची बनाता है, इसलिए यदि आप range(1, 10000000) यह 9999999 तत्वों के साथ स्मृति में एक सूची बनाता है

xrange एक जनरेटर है, इसलिए यह एक अनुक्रम वस्तु है जो कि आलसी का मूल्यांकन करता है

यह सच है, लेकिन पायथन 3 में, श्रेणी पायथन 2 एक्सरेन्ज () द्वारा लागू की जाएगी। यदि आपको वास्तव में सूची तैयार करने की आवश्यकता है, तो आपको करने की आवश्यकता होगी:

 list(range(1,100)) 

याद रखें, टाइमिट मॉड्यूल का उपयोग करने के लिए परीक्षण करने के लिए कोड के छोटे स्निपों का कितना तेज है!

 $ python -m timeit 'for i in range(1000000):' ' pass' 10 loops, best of 3: 90.5 msec per loop $ python -m timeit 'for i in xrange(1000000):' ' pass' 10 loops, best of 3: 51.1 msec per loop 

निजी तौर पर, मैं हमेशा श्रेणी () का उपयोग करता हूं, जब तक कि मैं वास्तव में बड़ी सूचियों से काम नहीं कर रहा हूं – जैसा कि आप दस लाख प्रविष्टियों की सूची के लिए देख सकते हैं, अतिरिक्त ओवरहेड केवल 0.04 सेकेंड है। और के रूप में कोरी बताते हैं, पायथन 3.0 एक्सरेन्ज में भाग जाएंगे और रेंज आपको वैसे ही इटरेएटर व्यवहार को भी देगी।

xrange केवल श्रेणी पैरामीटर को स्टोर करता है और मांग पर नंबरों को उत्पन्न करता है हालांकि, सी पायथन का क्रियान्वयन वर्तमान में अपने तर्क को सी के लिए सीमित करता है:

 xrange(2**32-1, 2**32+1) # When long is 32 bits, OverflowError: Python int too large to convert to C long range(2**32-1, 2**32+1) # OK --> [4294967295L, 4294967296L] 

ध्यान दें कि पायथन 3.0 में केवल range और यह 2.x xrange तरह व्यवहार करता है लेकिन न्यूनतम और अधिकतम अंत बिंदुओं पर सीमाओं के बिना।

एक्सरेन्ज एक इटरेटर देता है और केवल एक ही समय में स्मृति में एक नंबर रखता है। रेंज मेमोरी में नंबरों की पूरी सूची रखती है

लाइब्रेरी संदर्भ के साथ कुछ समय बिताएं। जितना अधिक परिचित आप इसके साथ हैं, उतना तेजी से आप इस तरह के सवालों के जवाब पा सकते हैं। विशेष रूप से महत्वपूर्ण हैं, बिल्टिन ऑब्जेक्ट्स और प्रकारों के बारे में पहले कुछ अध्याय।

एक्सरेज प्रकार का लाभ यह है कि एक एक्सरेंग ऑब्जेक्ट हमेशा एक ही मात्रा की स्मृति लेता है, चाहे वह रेंज का प्रतिनिधित्व करता हो जिसकी सीमा होती है। कोई सुसंगत प्रदर्शन फायदे नहीं हैं

एक पायथन निर्माण के बारे में त्वरित जानकारी प्राप्त करने का एक अन्य तरीका डॉकस्ट्रिंग और सहायता फ़ंक्शन है:

 print xrange.__doc__ # def doc(x): print x.__doc__ is super useful help(xrange) 

रेंज एक सूची बनाता है, इसलिए यदि आप सीमा (1, 10000000) करते हैं तो यह 10000000 तत्वों के साथ स्मृति में एक सूची बनाता है एक्सरेन्ज एक जनरेटर है, इसलिए यह लाजिली का मूल्यांकन करता है

यह आपको दो फायदे लाता है:

  1. आप MemoryError बिना लंबी सूचियों को MemoryError
  2. चूंकि यह प्रत्येक नंबर को हल कर लेता है, यदि आप जल्दी चलना बंद कर देते हैं, तो आप पूरी सूची बनाने में समय बर्बाद नहीं करेंगे।

मुझे कोई भी डॉक डॉक नहीं है :

यह फ़ंक्शन range() समान है, लेकिन सूची के बजाय एक xrange ऑब्जेक्ट देता है यह एक अपारदर्शी अनुक्रम प्रकार होता है जो इसी सूची के समान मूल्यों को पैदा करता है, वास्तव में उन्हें सभी को एक साथ संग्रहीत किए बिना। range() xrange() पर xrange() का लाभ कम है (जब xrange() को उनके लिए पूछे जाने पर मान बनाते हैं) को छोड़कर जब एक बहुत बड़ी सीमा स्मृति-भूखे मशीन पर या जब रेंज के सभी तत्व हैं कभी इस्तेमाल नहीं किया (जैसे कि जब आमतौर पर लूप को break साथ समाप्त किया जाता है)

यह अनुकूलन कारणों के लिए है

श्रेणी () मूल्यों की सूची शुरू से अंत तक (आपके उदाहरण में 0 .. 20) बनायेगी। यह बहुत बड़ी रेंज पर एक महंगी ऑपरेशन बन जाएगी।

दूसरी तरफ एक्सरेन्ज () अधिक अनुकूलित है। यह केवल आवश्यक होने पर अगले मान की गणना करेगा (xrange अनुक्रम ऑब्जेक्ट के माध्यम से) और रेंज () जैसे सभी मानों की एक सूची नहीं बनाई है

इस सरल उदाहरण में आपको xrange पर range का लाभ मिलेगा:

 import timeit t1 = timeit.default_timer() a = 0 for i in xrange(1, 100000000): pass t2 = timeit.default_timer() print "time taken: ", (t2-t1) # 4.49153590202 seconds t1 = timeit.default_timer() a = 0 for i in range(1, 100000000): pass t2 = timeit.default_timer() print "time taken: ", (t2-t1) # 7.04547905922 seconds 

उपरोक्त उदाहरण xrange मामले में काफी कुछ बेहतर नहीं दर्शाता है।

अब xrange की तुलना में निम्नलिखित मामले देखें, जहां range वास्तव में बहुत धीमी है

 import timeit t1 = timeit.default_timer() a = 0 for i in xrange(1, 100000000): if i == 10000: break t2 = timeit.default_timer() print "time taken: ", (t2-t1) # 0.000764846801758 seconds t1 = timeit.default_timer() a = 0 for i in range(1, 100000000): if i == 10000: break t2 = timeit.default_timer() print "time taken: ", (t2-t1) # 2.78506207466 seconds 

range साथ, यह पहले से 0 से 100000000 (समय लेने वाली) की सूची बनाता है, लेकिन xrange एक जनरेटर है और यह केवल आवश्यकता के आधार पर संख्याएं उत्पन्न करता है, अर्थात, अगर चलना जारी रहता है

पायथन -3 में, range कार्यक्षमता का कार्यान्वयन पायथन xrange में xrange समान है, जबकि वे पायथन xrange में xrange साथ दूर कर xrange

हैप्पी कोडिंग !!

श्रेणी (): श्रेणी (1, 10) 1 से 10 नंबरों की सूची लौटाती है और पूरी सूची मेमोरी में रखती है।

एक्सरेन्ज (): श्रेणी () की तरह, लेकिन एक सूची लौटने के बजाय, एक ऑब्जेक्ट रिटर्न करता है जो मांग पर रेंज में नंबर बनाता है। पाशन के लिए, यह सीमा () से अधिक हल्का तेज है और अधिक मेमोरी कुशल है। एक्सरेन्ज () एक इटरेटर की तरह वस्तु और मांग पर संख्याएं उत्पन्न करता है। (आलसी मूल्यांकन)

 In [1]: range(1,10) Out[1]: [1, 2, 3, 4, 5, 6, 7, 8, 9] In [2]: xrange(10) Out[2]: xrange(10) In [3]: print xrange.__doc__ xrange([start,] stop[, step]) -> xrange object 

range(x,y) एक्स और वाई के बीच प्रत्येक नंबर की एक सूची देता है यदि आप लूप का उपयोग करते हैं, तो range धीमी है वास्तव में, range का एक बड़ा सूचकांक श्रेणी है। range(xy) एक्स और वाई के बीच सभी नंबरों की एक सूची मुद्रित करेगी

xrange(x,y) देता है xrange(x,y) लेकिन यदि आप लूप के for उपयोग करते हैं, तो xrange तेज़ हो जाता है। xrange की छोटी इंडेक्स श्रेणी है xrange केवल xrange(x,y) प्रिंट नहीं करेगा xrange(x,y) लेकिन यह अभी भी सभी नंबरों को रखेगा जो उसमें हैं।

 [In] range(1,10) [Out] [1, 2, 3, 4, 5, 6, 7, 8, 9] [In] xrange(1,10) [Out] xrange(1,10) 

यदि आप लूप का उपयोग करते हैं, तो यह काम करेगा

 [In] for i in range(1,10): print i [Out] 1 2 3 4 5 6 7 8 9 [In] for i in xrange(1,10): print i [Out] 1 2 3 4 5 6 7 8 9 

छोरों का उपयोग करते समय अधिक अंतर नहीं होता है, हालांकि इसे छपाई करते समय एक अंतर होता है!

कुछ अन्य उत्तर में यह बताया गया है कि पायथन 3 ने 2.x की range का सफाया कर दिया और इसका नाम बदलकर 2.x के xrange को range । हालांकि, जब तक आप 3.0 या 3.1 का उपयोग नहीं कर रहे हैं (जो कि कोई नहीं होना चाहिए), यह वास्तव में कुछ भिन्न प्रकार है

3.1 डॉक्स के अनुसार :

रेंज ऑब्जेक्ट्स में बहुत कम व्यवहार होता है: वे केवल इंडेक्सिंग, इट्रेशन, और len फ़ंक्शन का समर्थन करते हैं।

हालांकि, 3.2+ में, range एक पूर्ण अनुक्रम है- यह विस्तारित स्लाइड्स का समर्थन करता है, और collections.abc.Sequence सभी तरीकों। एक list रूप में एक ही शब्दों के साथ सशक्तिकरण। *

और, कम से कम सीपीथोन और पीएपी (केवल दो 3.2+ कार्यान्वयन जो वर्तमान में मौजूद हैं) में, इसमें index और count विधियों और ऑपरेटर में निरंतर समय पर कार्यान्वयन है (जब तक कि आप केवल इसे पूर्णांक प्रदान करते हैं)। इसका मतलब है कि 123456 in r लिखना 3.2+ में उचित है, जबकि 2.7 या 3.1 में यह एक भयानक विचार होगा।


* तथ्य यह है कि issubclass(xrange, collections.Sequence) 2.6-2.7 और 3.0-3.1 में True देता है एक बग है जो 3.2 में तय किया गया था और बैकअप नहीं।

अजगर 2.x में

रेंज (x) एक सूची देता है, जो एक्स तत्वों के साथ स्मृति में बनाई गई है

 >>> a = range(5) >>> a [0, 1, 2, 3, 4] 

एक्सरेन्ज (एक्स) एक्सरेंज ऑब्जेक्ट देता है जो जनरेटर ओजज है जो मांग पर नंबर उत्पन्न करता है। वे लूप (आलसी मूल्यांकन) के दौरान गणना की जाती हैं।

पाशन के लिए, यह रेंज () से थोड़ा अधिक तेज है और अधिक मेमोरी कुशल है।

 >>> b = xrange(5) >>> b xrange(5) 

जब एक लूप में एक्सरेन्ज के खिलाफ परीक्षण रेंज (मुझे पता है कि मुझे टाइमिट का उपयोग करना चाहिए, लेकिन यह एक मेमोरी से तेजी से हैक किया गया था, एक साधारण सूची समझ उदाहरण का उपयोग करके) मैं निम्नलिखित पाया:

 import time for x in range(1, 10): t = time.time() [v*10 for v in range(1, 10000)] print "range: %.4f" % ((time.time()-t)*100) t = time.time() [v*10 for v in xrange(1, 10000)] print "xrange: %.4f" % ((time.time()-t)*100) 

जो देता है:

 $python range_tests.py range: 0.4273 xrange: 0.3733 range: 0.3881 xrange: 0.3507 range: 0.3712 xrange: 0.3565 range: 0.4031 xrange: 0.3558 range: 0.3714 xrange: 0.3520 range: 0.3834 xrange: 0.3546 range: 0.3717 xrange: 0.3511 range: 0.3745 xrange: 0.3523 range: 0.3858 xrange: 0.3997 <- garbage collection? 

या, लूप के लिए एक्सरेेंज का उपयोग कर:

 range: 0.4172 xrange: 0.3701 range: 0.3840 xrange: 0.3547 range: 0.3830 xrange: 0.3862 <- garbage collection? range: 0.4019 xrange: 0.3532 range: 0.3738 xrange: 0.3726 range: 0.3762 xrange: 0.3533 range: 0.3710 xrange: 0.3509 range: 0.3738 xrange: 0.3512 range: 0.3703 xrange: 0.3509 

क्या मेरा स्निपेट परीक्षण ठीक से है? Xrange के धीमे उदाहरण पर कोई टिप्पणी? या एक बेहतर उदाहरण 🙂

अजगर में एक्सरेन्ज () और रेंज () उपयोगकर्ता के लिए इसी तरह काम करता है, लेकिन अंतर तब होता है जब हम इस बात के बारे में बात कर रहे हैं कि स्मृति दोनों फ़ंक्शन का उपयोग करने में कैसे आवंटित की जाती है।

जब हम रेंज का उपयोग कर रहे हैं () हम सभी चर के लिए मेमोरी आवंटित करते हैं जिससे यह उत्पन्न हो रहा है, इसलिए इसे बड़ा संख्या में उपयोग करने की अनुशंसा नहीं की जाती है। उत्पन्न करने के लिए चर का

दूसरे हाथ पर एक्सरेन्ज () एक समय में केवल एक विशेष मूल्य का निर्माण करता है और इसका प्रयोग केवल सभी आवश्यक मानों को मुद्रित करने के लिए किया जा सकता है।

श्रेणी संपूर्ण सूची तैयार करती है और इसे वापस करती है। एक्सरेन्ज नहीं है – यह मांग पर सूची में नंबरों को उत्पन्न करता है।

ग्राफ़िकल विश्लेषण के साथ सीमा और एक्सरेंज के बीच की तुलना के लिए निम्न पोस्ट पढ़ें

पायथन श्रृंखला बनाम एक्सरेन्ज

एक्सरेन्ज एक इटरेटर (मक्खी पर मूल्य उत्पन्न करता है) का उपयोग करता है, श्रेणी एक सूची देता है

क्या?
range रनटाइम पर एक स्थिर सूची देता है
xrange एक object देता है (जो कि जनरेटर की तरह काम करता है, हालांकि यह निश्चित रूप से एक नहीं है) जिससे मूल्यों को उत्पन्न किया जाता है और जब आवश्यक हो

कब का उपयोग करने के लिए?

  • xrange उपयोग करें यदि आप एक विशाल रेंज के लिए एक सूची बनाना चाहते हैं, तो 1 अरब का कहना है, खासकर जब आपके पास एक "मेमोरी संवेदनशील सिस्टम" जैसे कि एक सेल फोन है
  • range उपयोग करें यदि आप सूची पर कई बार पुनरावृत्त करना चाहते हैं

पीएस: पायथन xrange एक्स के range फ़ंक्शन == पायथन xrange एक्स के xrange फ़ंक्शन

श्रेणी () बनाम xrange () अजगर में:

रेंज () और एक्सरेन्ज () दो फ़ंक्शन हैं जिन्हें पायथन में लूप के लिए निश्चित समय की संख्या को पुनरावृति करने के लिए इस्तेमाल किया जा सकता है। पायथन 3 में, कोई एक्सरेन्ज नहीं है, लेकिन रेंज फंक्शन पायथन 2 में एक्सरेेंज की तरह व्यवहार करता है। अगर आप दो कोडों को लिखना चाहते हैं जो पायथन 2 और पायथन 3 दोनों पर चलेंगे, तो आपको रेंज () का उपयोग करना चाहिए।

श्रेणी () – यह रेंज () फ़ंक्शन का उपयोग कर बनाई गई संख्याओं की एक सूची देता है।

एक्सरेन्ज () – यह फ़ंक्शन जेनरेटर ऑब्जेक्ट देता है जिसे केवल पाशन करके नंबर प्रदर्शित करने के लिए उपयोग किया जा सकता है। केवल विशिष्ट श्रेणी की मांग पर प्रदर्शित की जाती है और इसे "आलसी मूल्यांकन" कहा जाता है

दोनों अलग-अलग तरीकों से लागू होते हैं और उनके साथ अलग-अलग विशेषताएं हैं। तुलना के गुण हैं:

  1. वापसी प्रकार मेमोरी ऑपरेशन उपयोग की गति
  2. याद
  3. ऑपरेशन उपयोग
  4. गति

1. वापसी का प्रकार:

श्रेणी () रिटर्न – सूची के रूप में वापसी प्रकार

एक्सरेन्ज () रिटर्न – एक्सरेन्ज () ऑब्जेक्ट

 # initializing a with range() a = range(1,10000) # initializing a with xrange() x = xrange(1,10000) # testing the type of a print ("The return type of range() is : ") print (type(a)) # testing the type of x print ("The return type of xrange() is : ") print (type(x)) 

आउटपुट:

 The return type of range() is : <type 'list'> The return type of xrange() is : <type 'xrange'> 

2. मेमोरी:

एक्सरेंज () का उपयोग कर रेंज को संचयित करने वाले चर की तुलना में श्रेणी () के द्वारा बनाई गई श्रेणी को संचयित करने वाला चर अधिक स्मृति लेता है। इसके लिए मूल कारण श्रेणी की वापसी प्रकार () है सूची और एक्सरेन्ज () xrange () ऑब्जेक्ट है।

 # initializing a with range() a = range(1,10000) # initializing a with xrange() x = xrange(1,10000) # testing the size of a print ("The size allotted using range() is : ") print (sys.getsizeof(a)) # testing the size of a print ("The size allotted using xrange() is : ") print (sys.getsizeof(x)) 

आउटपुट:

 The size allotted using range() is : 80064 The size allotted using xrange() is : 40 

3. संचालन उपयोग:

जैसा कि श्रेणी () सूची में लौटाता है, सूची पर लागू किए जाने वाले सभी कार्यों पर इसका उपयोग किया जा सकता है दूसरी ओर, एक्सरेन्ज () एक्सरेन्ज ऑब्जेक्ट के रूप में, सूची से जुड़े कार्यों को उन पर लागू नहीं किया जा सकता है, इसलिए कोई नुकसान नहीं है।

 # Python code to demonstrate range() vs xrange() # on basis of operations usage # initializing a with range() a = range(1,6) # initializing a with xrange() x = xrange(1,6) # testing usage of slice operation on range() print ("The list after slicing using range is : ") print (a[2:5]) # testing usage of slice operation on xrange() print ("The list after slicing using xrange is : ") print (x[2:5]) 

आउटपुट:

 The list after slicing using range is : [3, 4, 5] The list after slicing using xrange is : Traceback (most recent call last): File "pp.py", line 18, in <module> print (x[2:5]) TypeError: sequence index must be integer, not 'slice' 

4. गति:

तथ्य यह है कि एक्सरेन्ज () केवल जेनरेटर ऑब्जेक्ट का मूल्यांकन करता है जो केवल आलसी मूल्यांकन के लिए जरूरी मान हैं, इसलिए सीमा से कार्यान्वयन में तेज़ है ()

महत्वपूर्ण बिंदु :

  1. यदि आप कोड लिखना चाहते हैं जो पायथन 2 और पायथन 3 दोनों पर चलेगा, तो रेंज () का उपयोग करें क्योंकि एक्सरेन्ज मज़िशन को पायथन 3 में पदावनत किया गया है।
  2. रेंज () तेजी से एक ही अनुक्रम पर कई बार फिर से चलती है।
  3. एक्सरेन्ज () को हर बार पूर्णांक ऑब्जेक्ट को फिर से बनाना पड़ता है, लेकिन रेंज () में वास्तविक पूर्णांक ऑब्जेक्ट्स होंगे (यह हमेशा मेमोरी के संदर्भ में भी बदतर प्रदर्शन करेगा)

0-एन वस्तुओं, रेंज और एक्सरेन्ज के स्कैनिंग / प्रिंटिंग के लिए निम्नानुसार काम करता है।

श्रेणी () – स्मृति में एक नई सूची बनाता है और पूरे 0 से एन आइटम (पूरी तरह से एन + 1) लेती है और उन्हें प्रिंट करती है। एक्सरेन्ज () – एक इटरेटर उदाहरण बनाता है जो आइटमों को स्कैन करता है और स्मृति में केवल वर्तमान घटित आइटम रखता है, इसलिए हर समय समान मात्रा में स्मृति का उपयोग करना।

यदि आवश्यक तत्व कुछ हद तक सूची की शुरुआत में है, तो यह समय और स्मृति की एक अच्छी मात्रा बचाता है।

range(..) / xrange(..) लिए छोटे तर्क के लिए अंतर घटता है:

 $ python -m timeit "for i in xrange(10111):" " for k in range(100):" " pass" 10 loops, best of 3: 59.4 msec per loop $ python -m timeit "for i in xrange(10111):" " for k in xrange(100):" " pass" 10 loops, best of 3: 46.9 msec per loop 

इस मामले में xrange(100) केवल 20% अधिक कुशल है

सभी ने इसे बहुत ही समझाया है लेकिन मैं इसे अपने लिए देखना चाहता था मैं अजगर 3 का उपयोग करता हूँ इसलिए, मैंने संसाधन मॉनिटर खोल दिया (विंडोज में!), और सबसे पहले, निम्न कमांड को पहले क्रियान्वित किया:

 a=0 for i in range(1,100000): a=a+i 

और फिर 'प्रयोग में' मेमोरी में परिवर्तन की जांच की। यह तुच्छ था उसके बाद, मैं निम्नलिखित कोड चलाया:

 for i in list(range(1,100000)): a=a+i 

और इसके उपयोग के लिए स्मृति का एक बड़ा हिस्सा तुरंत लिया। और, मुझे यकीन था आप खुद के लिए कोशिश कर सकते हैं

यदि आप पायथन 2X का प्रयोग कर रहे हैं तो पहले कोड में 'रेंज ()' को 'एक्सरेन्ज ()' के साथ बदलें और 'श्रेणी ()' के साथ 'सूची (श्रेणी ())'

श्रेणी और एक्सरेंज के बीच का अंतर जानने के लिए इस पोस्ट को देखें:

उद्धरण के लिए:

range आपको सटीक रूप से xrange 0 से शुरू होने वाली परिभाषित लंबाई की, लगातार पूर्णांक की एक सूची, हालांकि, एक "एक्सरेन्ज ऑब्जेक्ट" देता है , जो इटरेटर की तरह एक बड़ा सौदा करता है

रेंज एक सूची देता है, जबकि एक्सरेन्ज एक्सरेन्ज ऑब्जेक्ट देता है जो रेंज साइज के बावजूद एक ही मेमोरी लेता है, इस मामले में, केवल एक तत्व उत्पन्न होता है और प्रत्येक आवृत्ति के अनुसार उपलब्ध होता है, जबकि रेंज का उपयोग करने के मामले में, सभी तत्व एक बार में उत्पन्न होते हैं स्मृति में उपलब्ध हैं

रेंज: -रेन्ज एक बार में सब कुछ पॉपुलेटेड होगा। इसका अर्थ है कि सीमा की प्रत्येक संख्या स्मृति पर कब्जा कर लेगी।

एक्सरेन्ज: -जेंजर कुछ जनरेटर की तरह है, जब आप संख्याओं की श्रेणी चाहते हैं, लेकिन आप उन्हें संग्रहीत नहीं करना चाहते हैं, जैसे जब आप लूप के लिए उपयोग करना चाहते हैं तो स्मृति कुशल।

सहायता डॉक्स से

पायथन 2.7.12

 >>> print range.__doc__ range(stop) -> list of integers range(start, stop[, step]) -> list of integers Return a list containing an arithmetic progression of integers. range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0. When step is given, it specifies the increment (or decrement). For example, range(4) returns [0, 1, 2, 3]. The end point is omitted! These are exactly the valid indices for a list of 4 elements. >>> print xrange.__doc__ xrange(stop) -> xrange object xrange(start, stop[, step]) -> xrange object Like range(), but instead of returning a list, returns an object that generates the numbers in the range on demand. For looping, this is slightly faster than range() and more memory efficient. 

पायथन 3.5.2

 >>> print(range.__doc__) range(stop) -> range object range(start, stop[, step]) -> range object Return an object that produces a sequence of integers from start (inclusive) to stop (exclusive) by step. range(i, j) produces i, i+1, i+2, ..., j-1. start defaults to 0, and stop is omitted! range(4) produces 0, 1, 2, 3. These are exactly the valid indices for a list of 4 elements. When step is given, it specifies the increment (or decrement). >>> print(xrange.__doc__) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'xrange' is not defined 

अंतर स्पष्ट है पायथन 2.x में, range एक सूची देता है, xrange एक एक्सरेन्ज ऑब्जेक्ट देता है जो दुबारा है।

पायथन 3.x में, range को पायथन 2.x की xrange बन जाती है, और xrange निकाल दिया जाता है।