Yanıtlar:
Johannes'in işaret ettiği gibi,
for c in "string":
#do something with c
Yapıyı kullanarak python'da hemen hemen her şeyi tekrarlayabilirsiniz for loop
,
örneğin, open("file.txt")
bir dosya nesnesini döndürür (ve dosyayı açar), bunun üzerinden yineleyerek o dosyadaki satırlar üzerinden yinelenir
with open(filename) as f:
for line in f:
# do something with line
Eğer bu sihir gibi gözüküyorsa, öyle, ama arkasındaki fikir gerçekten basit.
for
Döngünün üzerinde çalışması için her türlü nesneye uygulanabilen basit bir yineleyici protokolü vardır .
Sadece bir next()
yöntemi tanımlayan bir yineleyici uygulayın __iter__
ve bir sınıfı bir yöntemi tekrarlanabilir hale getirmek için uygulayın. ( __iter__
elbette, bir yineleyici nesnesini, yani tanımlayan bir nesneyi döndürmelidir next()
)
Dize üzerinden yineleme yaparken dizine erişmeniz gerekiyorsa şunu kullanın 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
parametresini kullanın "start":for i, c in enumerate('test', start=1)
Daha da kolay:
for c in "test":
print c
for c in "test": print (c)
Neden?
Sadece daha kapsamlı bir cevap vermek için, bir kare pimi yuvarlak bir deliğe zorlamak istiyorsanız, bir dize üzerinde yineleme C yolu Python'da uygulanabilir.
i = 0
while i < len(str):
print str[i]
i += 1
Ama sonra tekrar, neden dizeler doğal olarak yinelenebilir olduğunda?
for i in str:
print i
for i in range(len(...))
şeytan. Python 2.x'de range()
bir liste oluşturur, böylece çok uzun bir süre için çok büyük bir bellek bloğu tahsis edebilirsiniz. En azından xrange()
bu durumlarda kullanın . Ayrıca, aynı dizenin tekrarlanan dizine eklenmesi, doğrudan dizenin yinelenmesinden çok daha yavaştır. Dizine ihtiyacınız varsa kullanın enumerate()
.
Ayrıca böyle ilginç bir şey yapabilir ve döngü için kullanarak işinizi yapabilirsiniz
#suppose you have variable name
name = "Mr.Suryaa"
for index in range ( len ( name ) ):
print ( name[index] ) #just like c and c++
Cevap:
Bay . S uryaa
Ancak range () değeri sıra olan değerlerin bir listesini oluşturduğundan, adı doğrudan kullanabilirsiniz.
for e in name:
print(e)
Bu aynı sonucu verir ve daha iyi görünür ve liste, grup ve sözlük gibi herhangi bir sekansla çalışır.
Yedekte Yerleşik İşlevleri (Python Topluluğu'ndaki BIF'ler) kullandık
1) range () - range () BIF, dizin oluşturmak için kullanılır Örnek
for i in range ( 5 ) :
can produce 0 , 1 , 2 , 3 , 4
2) len () - len () BIF, verilen dizenin uzunluğunu bulmak için kullanılır
Bir dize üzerinde yineleme yapmak için daha işlevsel bir yaklaşım kullanmak isterseniz (belki de bir şekilde dönüştürmek için), dizeyi karakterlere bölebilir, her birine bir işlev uygulayabilir ve sonuçta ortaya çıkan karakter listesini bir dizeye geri ekleyebilirsiniz.
Bir dize doğası gereği bir karakter listesidir, bu nedenle 'harita' dizginin üzerinde yinelenir - ikinci argüman olarak - işlevi uygulayarak - ilk argüman - her birine.
Örneğin, burada yapmak istediğim tek şey karakterde önemsiz bir değişiklik olduğu için basit bir lambda yaklaşımı kullanıyorum: burada, her karakter değerini artırmak için:
>>> ''.join(map(lambda x: chr(ord(x)+1), "HAL"))
'IBM'
veya daha genel olarak:
>>> ''.join(map(my_function, my_string))
burada my_function karakter değerini alır ve karakter değerini döndürür.
Burada birkaç cevap kullanılmaktadır range
. xrange
genellikle tam bir liste yerine bir jeneratör döndürdüğü için daha iyidir. Bellek ve / veya çok çeşitli uzunluklarda yinelenebilirlerin sorun olabileceği durumlarda xrange
üstündür.
İhtiyacınız olan bir durumda koşarsanız, bunun üzerinde get the next char of the word using __next__()
bir string_iterator
ve tekrar etmeyi unutmayın.original string (it does not have the __next__() method)
Bu örnekte, bir char = [
bulduğumda , bulamadığımda bir sonraki kelimeye bakmaya devam ]
ettiğim için __next__ kullanmam gerekiyor
burada dize üzerinde bir for döngüsü yardımcı olmaz
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