답변:
요하네스가 지적했듯이
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)
왜?
좀 더 포괄적 인 대답을하기 위해, 사각 페그를 둥근 구멍에 강제로 밀어 넣고 싶다면 문자열을 반복하는 C 방식을 파이썬에 적용 할 수 있습니다.
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++
대답은
씨 . 수리아
그러나 range ()는 시퀀스 값 목록을 생성하므로 직접 이름을 사용할 수 있습니다
for e in name:
print(e)
이것은 동일한 결과를 생성하고 더 좋아 보이고 목록, 튜플 및 사전과 같은 모든 시퀀스에서 작동합니다.
우리는 내장 함수 (Python Community의 BIF)를 견인했습니다.
1) range ()-range () BIF는 인덱스를 만드는 데 사용됩니다. 예
for i in range ( 5 ) :
can produce 0 , 1 , 2 , 3 , 4
2) len ()-len () BIF는 주어진 문자열의 길이를 찾는 데 사용됩니다
문자열을 반복하는 데 더 기능적인 접근 방식을 사용하려면 (어쩌면 어떻게 든 변환) 문자열을 문자로 분할하고 각 함수에 함수를 적용한 다음 결과 문자 목록을 다시 문자열로 결합 할 수 있습니다.
문자열은 본질적으로 문자 목록이므로 'map'은 문자열을 두 번째 인수로-함수-첫 번째 인수-각 문자열에 적용하여 문자열을 반복합니다.
예를 들어, 여기서는 간단한 람다 접근 방식을 사용합니다. 왜냐하면 내가 원하는 것은 문자를 간단하게 수정하는 것입니다. 여기에서 각 문자 값을 증가시킵니다.
>>> ''.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