পাইথনে সূচকগুলি ব্যবহার করে পিছনের দিকে লুপ করবেন?


286

আমি 100 থেকে 0 পর্যন্ত লুপ নেওয়ার চেষ্টা করছি আমি পাইথনে এটি কীভাবে করব?

for i in range (100,0) কাজ করে না


9
বিটিডাব্লু, আপনি সম্ভবত 99 থেকে 0 পর্যন্ত লুপ করতে চান এবং খুব কমই 100 থেকে 0 পর্যন্ত লুপ করতে চান এটি উত্তরগুলিকে প্রভাবিত করে।
একিউম্যানাস

1
@ অ্যাকুমেনাস এখানে পৌঁছে যখন ঠিক ঠিক তেমনই সন্ধান করেছি। এবং রেকর্ডের জন্য সমাধানটি সহজভাবে লিখতে হবে: range(100)[::-1](যা স্বয়ংক্রিয়ভাবে অনুবাদ হয় range(9, -1, -1)) - অজগর ৩.7 এ পরীক্ষিত
হাসান

উত্তর:


399

চেষ্টা করুন range(100,-1,-1), তৃতীয় যুক্তিটি ব্যবহারের বর্ধিতকরণ ( এখানে ডকুমেন্টেড )।

("সীমা" বিকল্পগুলি, শুরু করুন, থামান, পদক্ষেপটি এখানে ডকুমেন্টেড রয়েছে )


3
এছাড়াও সংগ্রহ থেকে আইটেমগুলি মুছে ফেলার জন্য আমার এটি ব্যবহার করা প্রয়োজন, তাই কেবল সূচকগুলি চেয়েছিলেন।
জোয়ান ওয়েঙ্গেজ

2
দ্বিতীয় যুক্তি চূড়ান্ত মান থেকে এক কম। সুতরাং আপনি যদি -1 রাখেন তবে রেঞ্জটি 0 এ থামবে, আপনি -5 রাখলে, পরিসীমাটি -4 এ থামবে (-1 এর
বর্ধনের জন্য

200

আমার মতে, এটি সর্বাধিক পঠনযোগ্য:

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

14
এটি গ্রহণযোগ্য উত্তরের চেয়ে ভাল কারণ এটি মেমরির সমস্ত সংখ্যা আসলে বরাদ্দ করে না (পাইথন 3 এ স্বীকৃত উত্তরটি হয় না), এবং এটি আরও স্পষ্টত যা ঘটছে তা স্পষ্ট।
Blixt

5
২.6 এর আগে পাইথন সকল সংখ্যা বরাদ্দ করে, কারণ বিপরীতটির পিছনে পিছনে যাওয়ার জন্য এক্সরঞ্জকে বলার কোনও উপায় নেই ... (পাইথন ২.6 যেহেতু এটি __ বিপরীত __ () বলে))
রবার্ট সিমার

আমি পছন্দ reversed(xrange(len(list)))করি xrange(len(list)-1:-1:-1); পরেরটি দেখতে অনেকগুলি অদ্ভুত দেখাচ্ছে -1
মুসিফিল

1
এক্সরেঞ্জ () পাইথন 3-তে আর উপলভ্য নয়
ক্রিস গ্রাফ

1
পাইথন 3-তে, 2.7-র rangeমতো একই আচরণ করে xrange। @ হ্যাকসোই ব্যবহারের ক্ষেত্রে নির্ভর করে তবে ধরা যাক আপনি একটি বড় বাফারে পিছন দিকে ঘুরে যাচ্ছেন, ধরা যাক এটি 10 ​​মেগাবাইট, তারপরে বিপরীত সূচকগুলি তৈরি করতে কয়েক সেকেন্ড সময় লাগবে এবং 50 এমবি মেমরিরও বেশি সময় লাগবে। বিপরীত জেনারেটরটি ব্যবহার করতে মিলিসেকেন্ডগুলি লাগবে এবং কেবলমাত্র কয়েক বাইট মেমরি ব্যবহার করতে পারে।
Blixt

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পিছনের দিকে যেতে পরিসীমা () এর তৃতীয় প্যারামিটার নির্দিষ্ট করতে হবে ।

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

দ্রষ্টব্য: এতে আউটপুটে 100 এবং 0 অন্তর্ভুক্ত রয়েছে।

একাধিক উপায় আছে।

উত্তম উপায়

পাইথোনিক উপায়ে পিইপি 0322 পরীক্ষা করুন ।

এটি পাইথন 3 পাইথোনিক উদাহরণ যা 100 থেকে 0 (100 এবং 0 সহ) মুদ্রণ করে।

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

1
হ্যাঁ, পিইপি-322 আমাদের পুনরাবৃত্তির বিপরীত করার জন্য একটি পরিষ্কার এবং সর্বনিম্ন ত্রুটি-প্রবণ উপায় দেয়।
অ্যালেন শেন

1
এটা ভাল. reversedপিইপি -২২২২ এ কীভাবে প্রয়োগ করা যায় তার সুপারিশটি বিভ্রান্তিমূলক, সুতরাং এটি লক্ষ করা উচিত যে এটি পুনরাবৃত্তিযোগ্যদের উপর 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

স্বল্প ও মধুর. কোডএকডেমি কোর্স করার সময় এটিই আমার সমাধান ছিল। রেভ ক্রমে একটি স্ট্রিং মুদ্রণ করে।

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
একিউম্যানাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.