जवाबों:
जैसा कि जोहान्स ने बताया,
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(...))
बुराई है। अजगर 2.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++
जवाब है
श्री । स उिरया
हालाँकि, रेंज () उन मानों की एक सूची बनाती है जो अनुक्रम है इस प्रकार आप सीधे नाम का उपयोग कर सकते हैं
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 एक char value लेता है और char value वापस करता है।
कई उत्तर यहां उपयोग करते हैं range
। xrange
आम तौर पर बेहतर है क्योंकि यह पूरी तरह से त्वरित सूची के बजाय एक जनरेटर लौटाता है। जहां मेमोरी और या व्यापक रूप से भिन्न लंबाई की पुनरावृत्तियाँ एक मुद्दा हो सकती हैं, xrange
श्रेष्ठ है।
यदि आप कभी भी ऐसी स्थिति में दौड़ते हैं, जहाँ आपको आवश्यकता है get the next char of the word using __next__()
, तो उस पर एक string_iterator
और पुनरावृति बनाना याद रखें और न किoriginal string (it does not have the __next__() method)
इस उदाहरण में, जब मुझे कोई चार्ट मिलता है = [
मैं अगले शब्द ]
को देखता रहता हूं, जब मुझे नहीं मिलता है , इसलिए मुझे __ne_T_T का उपयोग करना होगा
यहाँ स्ट्रिंग पर लूप के लिए मदद नहीं करेगा
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