পাইথন তালিকার পুনরাবৃত্তির জন্য সূচক শুরু করুন


90

পাইথনে কোনও তালিকা পুনরুক্তি করার সময় সূচনা সূচী নির্ধারণের সেরা উপায় কী। উদাহরণস্বরূপ, আমি সপ্তাহের দিনগুলির একটি তালিকা রয়েছে - রবিবার, সোমবার, মঙ্গলবার, ... শনিবার - তবে আমি সোমবার থেকে তালিকাটি দিয়ে পুনরাবৃত্তি করতে চাই। এটি করার জন্য সেরা অনুশীলন কী?


4
আপনি কি শনিবার পর্যন্ত লুপ করতে চান, বা আপনি এটি চারদিকে মোড়ানো এবং রবিবার শেষ মুদ্রণ করতে চান?
janchopanza

আমি শনিবার পর্যন্ত লুপ করতে চেয়েছিলাম আমি এখনও অবধি বুঝতে পারি নি যে আপনি পাইথনের তালিকায় টুকরো টুকরো ব্যবহার করতে পারেন।
ভিনসেন্ট কাতালানো

এমন কোনও সমাধান রয়েছে যা জেনারেটর / পুনরাবৃত্তিগুলির সাথেও যোগাযোগ করে এবং কেবল তালিকাগুলি নয়? বা সত্যিই বড় তালিকা?
চার্লি পার্কার

উত্তর:


177

আপনি কাটা ব্যবহার করতে পারেন :

for item in some_list[2:]:
    # do stuff

এটি তৃতীয় উপাদান থেকে শুরু হবে এবং শেষ পর্যন্ত পুনরাবৃত্তি হবে।


4
আমি ঠিক এটিই খুঁজছিলাম। ধন্যবাদ!
ভিনসেন্ট কাতালানো

30
বড় তালিকার জন্য এটি কি অদক্ষ নয়? আমি বিশ্বাস করি যে এই স্লাইস অপারেশনটি তালিকার উপাদানগুলিকে একটি নতুন তালিকায় উল্লেখ করা হয়েছে copy
আনডিড কার্নেল

4
হ্যাঁ এটি বৃহত তালিকার পক্ষে অদক্ষ। অনুলিপি করা এমন কোনও সমাধানের জন্য নীচে জিনিবলারের উত্তর দেখুন।
বিজার্ন পোলেক্স

আপনি যদি জেনারেটর / পুনরাবৃত্ত ব্যবহার করে লুপিং করছেন তবে আপনি এটি কীভাবে করবেন?
চার্লি পার্কার

4
isliceজন লা রুয়ের উত্তরের পরামর্শ অনুসারে আপনার ব্যবহার করা উচিত ।
বিজন পোলাক্স

52

islice তালিকার অংশটি অনুলিপি করার দরকার নেই এমন সুবিধা রয়েছে

from itertools import islice
for day in islice(days, 1, None):
    ...

13

প্রচলিত সি স্টাইলের লুপিংয়ের সূচকে আপনি সর্বদা সূচি ব্যবহার করে লুপ করতে পারেন:

for i in range(len(l)-1):
    print l[i+1]

"প্রতিটি উপাদানের উপর লুপ" শৈলী অনুসরণ করা সর্বদা ভাল কারণ এটি করা সাধারণ কাজ but



4

আপনি যদি চান সমস্ত কিছু Mondayপরে থেকে মুদ্রণ করা হয়, আপনি "সোমবার" তালিকার যে অবস্থানটি রয়েছে তা listসন্ধানের জন্য indexপদ্ধতিটি ব্যবহার করতে পারেন এবং অন্যান্য পোস্টগুলিতে বর্ণিত হিসাবে সেখান থেকে পুনরাবৃত্তি করতে পারেন। ব্যবহার list.indexকরে আপনাকে "সোমবার" -এর জন্য সূচককে হার্ড-কোডিং থেকে বাঁচায়, যা ত্রুটির একটি সম্ভাব্য উত্স:

days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
for d in days[days.index('Monday'):] :
   print d

সত্যিই দুর্দান্ত সমাধান!
অ্যাডারচক্স

3

এখানে একটি ঘূর্ণন জেনারেটর যা ইনপুট সিকোয়েন্সের একটি রেপড অনুলিপি তৈরি করার প্রয়োজন নেই ... যদি ইনপুট সিকোয়েন্সটি 7 টি আইটেমের চেয়ে অনেক বড় হয় তবে দরকারী হতে পারে।

>>> def rotated_sequence(seq, start_index):
...     n = len(seq)
...     for i in xrange(n):
...         yield seq[(i + start_index) % n]
...
>>> s = 'su m tu w th f sa'.split()
>>> list(rotated_sequence(s, s.index('m')))
['m', 'tu', 'w', 'th', 'f', 'sa', 'su']
>>>

হ্যাঁ - এবং অসীম পুনরাবৃত্তি ক্রম উত্পন্ন করতে প্রসারিত করা সহজ হবে।
স্লোথ্রপ

@ জনমচিনকে ধন্যবাদ জানাতে পারেন না: এই 264 বছর ধরে মারা যাওয়া কারও পক্ষে দুর্দান্ত কাজ
jjon

1

লোকেরা কেন তালিকার স্লাইসিং ব্যবহার করছেন (ধীরে ধীরে কারণ এটি একটি নতুন তালিকায় অনুলিপি করে), একটি লাইব্রেরি ফাংশন আমদানি করছেন বা এর জন্য কোন অ্যারে ঘোরানোর চেষ্টা করছেন?

range(start, stop, step)(যেখানে startএবং stepoptionচ্ছিক আর্গুমেন্ট রয়েছে) সহ একটি সাধারণ লুপ ব্যবহার করুন ।

উদাহরণস্বরূপ, সূচী 1 থেকে শুরু হওয়া অ্যারের মাধ্যমে লুপিং:

for i in range(1, len(arr)):
    print(arr[i])

0

আপনি যদি "চারপাশে মোড়ানো" এবং সোমবারের সাথে তালিকাটি কার্যকরভাবে ঘোরাতে চান (সোমবারের আগে কেবল আইটেমগুলি কেটে ফেলার চেয়ে):

dayNames = [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 
            'Friday', 'Saturday',  ]

startDayName = 'Monday'

startIndex = dayNames.index( startDayName )
print ( startIndex )

rotatedDayNames = dayNames[ startIndex: ] + dayNames [ :startIndex ]

for x in rotatedDayNames:
    print ( x )
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.