अजगर में सूचकांकों का उपयोग करके पीछे की ओर लूप करें?


286

मैं 100 से 0. को लूप कर रहा हूं। पायथन में मैं यह कैसे कर सकता हूं?

for i in range (100,0) काम नहीं करता है।


9
BTW, आप शायद 99 से 0 से लूप करना चाहते हैं, और शायद ही कभी 100 से 0. तक। यह उत्तरों को प्रभावित करता है।
एक्यूमेनस

1
@Acumenus वही था जो मैंने यहाँ पहुँचने पर खोजा था। और रिकॉर्ड के लिए समाधान केवल लिखना है: range(100)[::-1](जो स्वचालित रूप से अनुवादित है range(9, -1, -1)) - अजगर में परीक्षण किया गया 3.7
हसन

जवाबों:


399

कोशिश करो range(100,-1,-1), 3 तर्क का उपयोग करने के लिए वेतन वृद्धि ( यहाँ प्रलेखित )।

("रेंज" विकल्प, शुरू, बंद करो, कदम यहाँ प्रलेखित हैं )


3
इसके अलावा मुझे संग्रह से आइटम को हटाने के लिए इसका उपयोग करने की आवश्यकता है, इसलिए केवल सूचकांकों की आवश्यकता है।
जोन वेंज

2
दूसरा तर्क अंतिम मूल्य से एक कम है। इसलिए यदि आप -1
लगाते हैं

200

मेरी राय में, यह सबसे पठनीय है:

for i in reversed(xrange(101)):
    print i,

14
यह स्वीकृत उत्तर से बेहतर है क्योंकि यह वास्तव में मेमोरी में सभी नंबरों को आवंटित नहीं करता है (पायथन 3 में स्वीकृत उत्तर या तो नहीं होगा), और यह अधिक स्पष्ट है कि क्या हो रहा है।
ब्लिक्स

5
2.6 से पहले पाइथन सभी नंबरों को आवंटित करता है, क्योंकि उलट के पास पीछे की ओर जाने की व्यवस्था को बताने का कोई तरीका नहीं है ... (चूंकि पायथन 2.6 इसे __reversed __ ()) कहता है
रॉबर्ट सिएमर

मैं पसंद reversed(xrange(len(list)))करता हूं xrange(len(list)-1:-1:-1); उत्तरार्द्ध सिर्फ इतने सारे के साथ अजीब लग रहा है -1
मुशीफिल

1
xrange () अब पायथन 3 में उपलब्ध नहीं है
क्रिस ग्राफ

1
पायथन 3 में, rangeउसी तरह से व्यवहार xrangeकरता है जैसे 2.7 में करता है। @hacksoi उपयोग के मामले पर निर्भर करता है, लेकिन मान लीजिए कि आप एक बड़े बफर में पीछे की ओर घूम रहे हैं, मान लीजिए कि यह 10 एमबी है, तो रिवर्स इंडेक्स बनाने से सेकंड लगेगा और 50 एमबी से अधिक मेमोरी का उपयोग होगा। एक उल्टे जेनरेटर का उपयोग करने से मिलीसेकंड लगेगा और केवल कुछ बाइट्स मेमोरी का उपयोग करेंगे।
ब्लिक्स

34
for i in range(100, -1, -1)

और कुछ अधिक लंबा (और धीमा) समाधान:

for i in reversed(range(101))

for i in range(101)[::-1]

16

आमतौर पर पायथन में, आप पीछे से शुरू करने के लिए नकारात्मक सूचकांकों का उपयोग कर सकते हैं:

numbers = [10, 20, 30, 40, 50]
for i in xrange(len(numbers)):
    print numbers[-i - 1]

परिणाम:

50
40
30
20
10

8

आपका कोड काम क्यों नहीं किया

आप कोड for i in range (100, 0)ठीक है, को छोड़कर

तीसरा पैरामीटर ( step) डिफ़ॉल्ट रूप से है +1। इसलिए आपको -1पीछे की ओर बढ़ने के लिए 3 पैरामीटर को सीमा () तक निर्दिष्ट करना होगा ।

for i in range(100, -1, -1):
    print(i)

नोट: इसमें आउटपुट में 100 और 0 शामिल हैं।

इसके कई तरीके हैं।

बेहतर तरीका

पायथोनिक तरीके के लिए, पीईपी 0322 की जांच करें ।

यह 100 से 0 (100 और 0 सहित) से प्रिंट करने के लिए पायथन 3 पायथोनिक उदाहरण है।

for i in reversed(range(101)):
    print(i)

1
हां, PEP-322 हमें पुनरावृत्तियों को बदलने के लिए एक स्पष्ट और कम से कम त्रुटि-रहित तरीका देता है।
एलन शेन

1
यह अच्छा है। reversedपीईपी -322 में कैसे लागू किया जाए, की सिफारिश भ्रामक है, इसलिए यह ध्यान दिया जाना चाहिए कि reversedयह __reversed__चलने योग्य पर कॉल करेगा और परिणाम लौटाएगा, और rangeवस्तुओं के लिए यह एक आलसी मूल्यांकन किया गया पुनरावृत्ति range_objectहै। संक्षेप में: इस पद्धति का उपयोग करना अभी भी आलसी मूल्यांकन है।
रुजिह्म

5

एक और समाधान:

z = 10
for x in range (z):
   y = z-x
   print y

परिणाम:

10
9
8
7
6
5
4
3
2
1

युक्ति: यदि आप किसी सूची में वापस सूचकांकों को गिनने के लिए इस पद्धति का उपयोग कर रहे हैं, तो आप 'y' मान से -1 प्राप्त करना चाहेंगे, क्योंकि आपकी सूची सूचकांकों की शुरुआत 0 से होगी।


3

आपकी समस्या को हल करने का सरल उत्तर इस प्रकार हो सकता है:

for i in range(100):
    k = 100 - i
    print(k)


1

छोटा एवं सुन्दर। यह मेरा समाधान था जब codeAcademy कोर्स कर रहा था। रिवर्स ऑर्डर में एक स्ट्रिंग प्रिंट करता है।

def reverse(text):
    string = ""
    for i in range(len(text)-1,-1,-1):
        string += text[i]
    return string    

1

तुम हमेशा बढ़ती रेंज करते हैं और अपने मामले में एक चर से घटाना कर सकते हैं 100 - iजहां i in range( 0, 101 )

for i in range( 0, 101 ):
    print 100 - i

0

मैंने एक कोडे एकेडमी एक्सरसाइज में यह कोशिश की (रिवर्स में न तो बिना स्ट्रिंग का उपयोग किए और न ही :: -1)

def reverse(text):
    chars= []
    l = len(text)
    last = l-1
    for i in range (l):
        chars.append(text[last])
        last-=1

    result= ""   
    for c in chars:
        result += c
    return result
print reverse('hola')

0

मैं एक ही समय में दो सूचियों के माध्यम से पाश करना चाहता था, इसलिए मुझे नकारात्मक सूचकांक की आवश्यकता थी। यह मेरा समाधान है:

a= [1,3,4,5,2]
for i in range(-1, -len(a), -1):
    print(i, a[i])

परिणाम:

-1 2
-2 5
-3 4
-4 3
-5 1

0

ओह ठीक है सवाल गलत पढ़ा, मुझे लगता है कि यह एक सरणी में पिछड़ जाने के बारे में है? यदि हां, तो मेरे पास यह है:

array = ["ty", "rogers", "smith", "davis", "tony", "jack", "john", "jill", "harry", "tom", "jane", "hilary", "jackson", "andrew", "george", "rachel"]


counter = 0   

for loop in range(len(array)):
    if loop <= len(array):
        counter = -1
        reverseEngineering = loop + counter
        print(array[reverseEngineering])

ऐसा लगता है कि आपका उत्तर आपके द्वारा किए गए परीक्षण की कॉपी पेस्ट है। कृपया एक न्यूनतम उदाहरण पोस्ट करने का प्रयास करें: का उपयोग करना globalऔर timeजन्मजात प्रश्न के लिए प्रासंगिक नहीं है।
माइकल डोबेज़

-1

आप अजगर में एक कस्टम रिवर्स तंत्र भी बना सकते हैं। जिसका उपयोग कहीं भी उपयोग करने के लिए एक पुनरावृत्ति पीछे की ओर कर सकते हैं

class Reverse:
    """Iterator for looping over a sequence backwards"""
    def __init__(self, seq):
        self.seq = seq
        self.index = len(seq)

    def __iter__(self):
        return self

    def __next__(self):
        if self.index == 0:
            raise StopIteration
        self.index -= 1
        return self.seq[self.index]


>>> d = [1,2,3,4,5]
>>> for i in Reverse(d):
...   print(i)
... 
5
4
3
2
1

-2
a = 10
for i in sorted(range(a), reverse=True):
    print i

ढेर अतिप्रवाह में आपका स्वागत है! कृपया अपने कोड को संपादित करने के बारे में विचार करें कि आपका कोड क्या करता है और क्यों यह समस्या का समाधान करेगा। एक जवाब जो ज्यादातर सिर्फ कोड होता है (भले ही यह काम कर रहा हो) आमतौर पर ओपी को उनकी समस्या को समझने में मदद नहीं करेगा।
सुपरबाइसमैन

आपको पता चलता है कि उपयोग sortedकरने से पूरी सूची मेमोरी में स्टोर हो जाएगी, है ना? यह व्यर्थ है और बड़े के लिए संभव नहीं है a
एक्यूमेनस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.