উত্তর:
জোহানেস যেমন উল্লেখ করেছে,
for c in "string":
#do something with c
for loop
কনস্ট্রাক্ট ব্যবহার করে অজগরটিতে আপনি অনেক কিছু পুনরাবৃত্তি করতে পারেন ,
উদাহরণস্বরূপ, open("file.txt")
একটি ফাইল অবজেক্ট ফেরত দেয় (এবং ফাইলটি খোলে), তার উপর পুনরাবৃত্তি করে সেই ফাইলটির লাইনগুলি পুনরাবৃত্তি করে
with open(filename) as f:
for line in f:
# do something with line
যদি যাদুর মতো মনে হয় তবে ভাল, তবে এটির পিছনে ধারণাটি খুব সহজ।
এখানে একটি সরল পুনরায় প্রোটোকল রয়েছে যা for
লুপটিকে কাজ করতে কোনও ধরণের অবজেক্টে প্রয়োগ করা যেতে পারে ।
কেবল একটি পুনরাবৃত্তির next()
প্রয়োগ করুন যা একটি পদ্ধতি নির্ধারণ করে এবং একটি __iter__
পদ্ধতিটিকে ক্লাসে পুনরাবৃত্তিযোগ্য করার জন্য প্রয়োগ করে। ( __iter__
অবশ্যই, একটি পুনরাবৃত্তকারী অবজেক্টটি ফেরত দেওয়া উচিত, এটি এমন একটি বস্তু যা সংজ্ঞা দেয় next()
)
আপনি যদি স্ট্রিংটির মাধ্যমে পুনরাবৃত্তি করতে পারেন তবে সূচীতে অ্যাক্সেসের প্রয়োজন হলে এটি ব্যবহার করুন enumerate()
:
>>> for i, c in enumerate('test'):
... print i, c
...
0 t
1 e
2 s
3 t
1 t
, 2 e
, 3 s
, 4 t
: পরামিতি ব্যবহার 'শুরু'for i, c in enumerate('test', start=1)
আরও সহজ:
for c in "test":
print c
for c in "test": print (c)
কেন?
কেবলমাত্র আরও বিস্তৃত উত্তর দেওয়ার জন্য, স্ট্রিং দিয়ে পুনরাবৃত্তির সি উপায়টি পাইথনে প্রয়োগ করতে পারে, যদি আপনি সত্যিই কোনও বর্গক্ষেত্রটিকে একটি বৃত্তাকার ছিদ্রে জোর করতে চান।
i = 0
while i < len(str):
print str[i]
i += 1
কিন্তু তারপরে আবার, যখন স্ট্রিংগুলি অন্তর্নিহিত পুনরাবৃত্ত হয়?
for i in str:
print i
for i in range(len(...))
মন্দ। অজগর ২.x এ range()
একটি তালিকা তৈরি করে, যাতে খুব দীর্ঘ দৈর্ঘ্যের জন্য আপনি মেমরির একটি খুব বড় ব্লক বরাদ্দ করতে পারেন। এই ক্ষেত্রে খুব কম ব্যবহার করুন xrange()
। এছাড়াও, একই স্ট্রিংটির পুনরাবৃত্তি সূচকগুলি স্ট্রিংয়ের উপরে সরাসরি পুনরাবৃত্ত হওয়ার চেয়ে ধীর। আপনার যদি সূচকের প্রয়োজন হয় তবে ব্যবহার করুন enumerate()
।
ভাল আপনি এই মত কিছু আকর্ষণীয় করতে পারেন এবং লুপ জন্য ব্যবহার করে আপনার কাজ করতে পারেন
#suppose you have variable name
name = "Mr.Suryaa"
for index in range ( len ( name ) ):
print ( name[index] ) #just like c and c++
উত্তর হল
জনাব . এস uryaa
তবে যেহেতু পরিসর () মানগুলির একটি তালিকা তৈরি করে যা ক্রম হয় সুতরাং আপনি সরাসরি নামটি ব্যবহার করতে পারেন
for e in name:
print(e)
এটি একই ফলাফল তৈরি করে এবং আরও ভাল দেখায় এবং তালিকা, টিপল এবং অভিধানের মতো কোনও ক্রম সহ কাজ করে।
আমরা টু বিল্ট ইন ফাংশন (পাইথন সম্প্রদায়ের বিআইএফ) ব্যবহার করেছি
1) পরিসীমা () - পরিসর () বিআইএফ ইনডেক্স উদাহরণ তৈরি করতে ব্যবহৃত হয়
for i in range ( 5 ) :
can produce 0 , 1 , 2 , 3 , 4
2) লেন () - লেন () বিআইএফ প্রদত্ত স্ট্রিংয়ের দৈর্ঘ্য সনাক্ত করতে ব্যবহৃত হয়
যদি আপনি কোনও স্ট্রিংয়ের মাধ্যমে পুনরাবৃত্তি করতে আরও কার্যকরী পদ্ধতির ব্যবহার করতে চান (সম্ভবত এটি কোনওভাবে রূপান্তর করতে) তবে আপনি স্ট্রিংকে অক্ষরে ভাগ করতে পারেন, প্রতিটিটির সাথে একটি ফাংশন প্রয়োগ করতে পারেন, তারপরে অক্ষরের ফলাফলের তালিকায় ফিরে স্ট্রিংয়ে যোগ দিতে পারেন।
একটি স্ট্রিং অন্তর্নিহিত অক্ষরের একটি তালিকা, অতএব 'মানচিত্র' স্ট্রিংটির উপরে পুনরাবৃত্তি হবে - দ্বিতীয় যুক্তি হিসাবে - ফাংশন প্রয়োগ করে - প্রথম যুক্তি - প্রতিটিটির জন্য।
উদাহরণস্বরূপ, আমি এখানে একটি সরল ল্যাম্বডা পদ্ধতির ব্যবহার করি যেহেতু আমি যা করতে চাই তা হ'ল চরিত্রের একটি তুচ্ছ পরিবর্তন: এখানে প্রতিটি অক্ষরের মান বৃদ্ধি করতে:
>>> ''.join(map(lambda x: chr(ord(x)+1), "HAL"))
'IBM'
বা আরও সাধারণভাবে:
>>> ''.join(map(my_function, my_string))
যেখানে my_function একটি চরের মান গ্রহণ করে এবং একটি মান মান প্রদান করে।
বেশ কয়েকটি উত্তর এখানে ব্যবহার করুন range
। xrange
এটি সম্পূর্ণরূপে তাত্ক্ষণিক তালিকার চেয়ে জেনারেটরের ফেরত দেওয়ার কারণে সাধারণত ভাল। যেখানে মেমরি এবং বা বহুল-পরিবর্তিত দৈর্ঘ্যের পুনরাবৃত্তি একটি সমস্যা হতে পারে, তত xrange
উন্নত।
আপনি যদি এমন কোনও পরিস্থিতিতে দৌড়েন তবে এটি get the next char of the word using __next__()
তৈরির কথা মনে করুন string_iterator
এবং এটির উপরে পুনরাবৃত্তি করুন এবং এটি নয়original string (it does not have the __next__() method)
এই উদাহরণে, যখন আমি একটি চর খুঁজে পাই = [
আমি যখন খুঁজে পাই না তখন আমি পরবর্তী শব্দটি সন্ধান করতে ]
থাকি, সুতরাং আমার____ প্রবন্ধটি ব্যবহার করা দরকার
এখানে স্ট্রিং উপর লুপ জন্য একটি সাহায্য করবে না
myString = "'string' 4 '['RP0', 'LC0']' '[3, 4]' '[3, '4']'"
processedInput = ""
word_iterator = myString.__iter__()
for idx, char in enumerate(word_iterator):
if char == "'":
continue
processedInput+=char
if char == '[':
next_char=word_iterator.__next__()
while(next_char != "]"):
processedInput+=next_char
next_char=word_iterator.__next__()
else:
processedInput+=next_char