পাইথন ব্যবহার করে একটি স্ট্রিংয়ে প্রতিটি চরিত্রকে আইট্রেট করা


516

সি ++ তে আমি এর std::stringমতো পুনরাবৃত্তি করতে পারি :

std::string str = "Hello World!";

for (int i = 0; i < str.length(); ++i)
{
    std::cout << str[i] << std::endl;
}

পাইথনের স্ট্রিং দিয়ে আমি কীভাবে পুনরাবৃত্তি করব?

উত্তর:


441

জোহানেস যেমন উল্লেখ করেছে,

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())

অফিসিয়াল ডকুমেন্টেশন দেখুন


14
একটি দ্রষ্টব্য হিসাবে, বিপরীত পুনরাবৃত্তিগুলি সংরক্ষণাগারযুক্ত: সি এর জন্য বিপরীতমুখী ("স্ট্রিং")
আকসেলি পালান

ডকুমেন্টেশনের কোন অংশ থেকে আপনি জানেন যে স্ট্রিংটি একটি পুনরাবৃত্তকারী টাইপ?
উইঙ্কল্লার

Dir () দেখুন সঙ্গে একটি string..you রাউটার অ্যাট্রিবিউট।
ছায়া 3535

312

আপনি যদি স্ট্রিংটির মাধ্যমে পুনরাবৃত্তি করতে পারেন তবে সূচীতে অ্যাক্সেসের প্রয়োজন হলে এটি ব্যবহার করুন enumerate():

>>> for i, c in enumerate('test'):
...     print i, c
... 
0 t
1 e
2 s
3 t

9
প্রো টিপ: এটি শূন্য থেকে শুরু হয়। আপনি এক থেকে এটা শুরু করতে এমন: 1 t, 2 e, 3 s, 4 t: পরামিতি ব্যবহার 'শুরু'for i, c in enumerate('test', start=1)
Messa

90

আরও সহজ:

for c in "test":
    print c

আমি পাইথনের একজন নবাগত। কোনও কারণে, এটি আমার পরিবেশে সংকলন করে না, এবং এটি কাজ করতে আমাকে ব্রাকেটগুলিতে সি লাগাতে হয়েছিল: for c in "test": print (c) কেন?
মাউরো ভ্যানেটি 10

7
@ মাউরোভ্যানেটি এটি অবশ্যই অবশ্যই কারণ আপনি পাইথন 3 ব্যবহার করছেন এবং আমি যখন প্রশ্নের উত্তর দিয়েছিলাম সেখানে কেবল মাত্র পাইথন ২ ছিল
জোহানেস ওয়েস

37

কেবলমাত্র আরও বিস্তৃত উত্তর দেওয়ার জন্য, স্ট্রিং দিয়ে পুনরাবৃত্তির সি উপায়টি পাইথনে প্রয়োগ করতে পারে, যদি আপনি সত্যিই কোনও বর্গক্ষেত্রটিকে একটি বৃত্তাকার ছিদ্রে জোর করতে চান।

i = 0
while i < len(str):
    print str[i]
    i += 1

কিন্তু তারপরে আবার, যখন স্ট্রিংগুলি অন্তর্নিহিত পুনরাবৃত্ত হয়?

for i in str:
    print i

6
আপনার প্রথম লুপটির পরিবর্তে আপনি এটি করতে পারেন: আই ইন ইন রেঞ্জের জন্য (লেন (স্ট্র)): মুদ্রণ (আরআর [i]) আমার মতে কোনটি আপনার নিজের পক্ষে কাউন্টার পরিচালনা করার চেয়ে ভাল। আরও বেশি ভাল হল গণক ব্যবহার করে মার্কের উত্তর।
আইহাম

1
এটি কেবলমাত্র এতদিন সি ব্যবহার করার উপর ভিত্তি করে তৈরি হতে পারে তবে আমি প্রায় সর্বদা এই সি-ইশ পদ্ধতিটি ব্যবহার করে শেষ করি। উদাহরণস্বরূপ, আমার কাছে প্রায় 4-সংখ্যার সংখ্যা ছড়িয়ে ছিটিয়ে থাকা একটি ফাইল রয়েছে, যার সবগুলিই 0 দিয়ে শুরু হয় find সুতরাং আমাকে একটি "0" খুঁজে বের করতে হবে এবং এটি এবং পরবর্তী 3 টি অক্ষর ধরতে হবে, এবং যদি সেখানে নম্বরটি অনুলিপি না করেই এগিয়ে যেতে হবে? আরও 0 জন অনুসরণ করছে "For for c in str" বা "i, c in enumerate (str)" পদ্ধতিগুলির কোনওটিই কাজ করে না কারণ আমার সূচকের নিয়ন্ত্রণ প্রয়োজন। যদিও আমি নিশ্চিত যে একটি নিয়মিত প্রকাশটি আরও ভাল হবে।
gkimsey

1
for i in range(len(...))মন্দ। অজগর ২.x এ range()একটি তালিকা তৈরি করে, যাতে খুব দীর্ঘ দৈর্ঘ্যের জন্য আপনি মেমরির একটি খুব বড় ব্লক বরাদ্দ করতে পারেন। এই ক্ষেত্রে খুব কম ব্যবহার করুন xrange()। এছাড়াও, একই স্ট্রিংটির পুনরাবৃত্তি সূচকগুলি স্ট্রিংয়ের উপরে সরাসরি পুনরাবৃত্ত হওয়ার চেয়ে ধীর। আপনার যদি সূচকের প্রয়োজন হয় তবে ব্যবহার করুন enumerate()
ইজাক

6

ভাল আপনি এই মত কিছু আকর্ষণীয় করতে পারেন এবং লুপ জন্য ব্যবহার করে আপনার কাজ করতে পারেন

#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) লেন () - লেন () বিআইএফ প্রদত্ত স্ট্রিংয়ের দৈর্ঘ্য সনাক্ত করতে ব্যবহৃত হয়


4

যদি আপনি কোনও স্ট্রিংয়ের মাধ্যমে পুনরাবৃত্তি করতে আরও কার্যকরী পদ্ধতির ব্যবহার করতে চান (সম্ভবত এটি কোনওভাবে রূপান্তর করতে) তবে আপনি স্ট্রিংকে অক্ষরে ভাগ করতে পারেন, প্রতিটিটির সাথে একটি ফাংশন প্রয়োগ করতে পারেন, তারপরে অক্ষরের ফলাফলের তালিকায় ফিরে স্ট্রিংয়ে যোগ দিতে পারেন।

একটি স্ট্রিং অন্তর্নিহিত অক্ষরের একটি তালিকা, অতএব 'মানচিত্র' স্ট্রিংটির উপরে পুনরাবৃত্তি হবে - দ্বিতীয় যুক্তি হিসাবে - ফাংশন প্রয়োগ করে - প্রথম যুক্তি - প্রতিটিটির জন্য।

উদাহরণস্বরূপ, আমি এখানে একটি সরল ল্যাম্বডা পদ্ধতির ব্যবহার করি যেহেতু আমি যা করতে চাই তা হ'ল চরিত্রের একটি তুচ্ছ পরিবর্তন: এখানে প্রতিটি অক্ষরের মান বৃদ্ধি করতে:

>>> ''.join(map(lambda x: chr(ord(x)+1), "HAL"))
'IBM'

বা আরও সাধারণভাবে:

>>> ''.join(map(my_function, my_string))

যেখানে my_function একটি চরের মান গ্রহণ করে এবং একটি মান মান প্রদান করে।


2

বেশ কয়েকটি উত্তর এখানে ব্যবহার করুন rangexrangeএটি সম্পূর্ণরূপে তাত্ক্ষণিক তালিকার চেয়ে জেনারেটরের ফেরত দেওয়ার কারণে সাধারণত ভাল। যেখানে মেমরি এবং বা বহুল-পরিবর্তিত দৈর্ঘ্যের পুনরাবৃত্তি একটি সমস্যা হতে পারে, তত xrangeউন্নত।


1
দ্রষ্টব্য যে এটি কেবল পাইথন 2 এ প্রযোজ্য যা
স্যাম ম্যাসন

0

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