回答:
ヨハネスが指摘したように、
for c in "string":
#do something with c
あなたはfor loop
構文を使ってPythonでほとんど何でも繰り返すことができます、
たとえば、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)
なぜですか?
より包括的な答えを出すために、本当に正方形のペグを丸い穴に押し込みたい場合は、文字列を反復するCの方法をPythonで適用できます。
i = 0
while i < len(str):
print str[i]
i += 1
しかし、繰り返しますが、なぜ文字列が本質的に反復可能であるのですか?
for i in str:
print i
for i in range(len(...))
悪です。python 2.xでは、range()
リストを作成するため、非常に長い場合、非常に大きなメモリブロックが割り当てられる可能性があります。xrange()
これらの場合は、少なくとも使用してください。また、同じ文字列の繰り返しインデックス作成は、文字列を直接反復するよりもはるかに遅くなります。インデックスが必要な場合は、を使用してくださいenumerate()
。
まあ、このような面白いことをして、forループを使用して仕事をすることもできます
#suppose you have variable name
name = "Mr.Suryaa"
for index in range ( len ( name ) ):
print ( name[index] ) #just like c and c++
答えは
氏 。S uryaa
ただし、range()はシーケンスである値のリストを作成するため、名前を直接使用できます
for e in name:
print(e)
これも同じ結果を生成し、見栄えがよくなり、リスト、タプル、辞書などの任意のシーケンスで機能します。
私たちは2つの組み込み関数(PythonコミュニティのBIF)を使用しました
1)range()-range()BIFはインデックスの作成に使用されます例
for i in range ( 5 ) :
can produce 0 , 1 , 2 , 3 , 4
2)len()-len()BIFは、指定された文字列の長さを見つけるために使用されます
文字列を反復するためのより機能的なアプローチを使用したい場合(おそらく何らかの方法で変換する場合)、文字列を文字に分割し、それぞれに関数を適用してから、結果の文字のリストを文字列に結合することができます。
文字列は本質的に文字のリストであるため、「マップ」は文字列を反復します-2番目の引数として-関数-最初の引数-をそれぞれに適用します。
たとえば、ここでは簡単なラムダアプローチを使用しています。これは、文字を少し変更するだけなので、ここで各文字の値をインクリメントするためです。
>>> ''.join(map(lambda x: chr(ord(x)+1), "HAL"))
'IBM'
より一般的には:
>>> ''.join(map(my_function, my_string))
ここで、my_functionはchar値を取り、char値を返します。
必要な状況で実行する場合はget the next char of the word using __next__()
、を作成しstring_iterator
て反復し、original string (it does not have the __next__() method)
この例では、char =が見つかると[
、次の単語を探し続けますが]
、見つからないので、__ next__を使用する必要があります
ここでは、文字列のforループは役に立ちません
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