如何在Python中对字符串进行迭代(每次通过循环获取字符串中的每个字符)?
正如 Johannes 指出的那样,
for c in "string":
#do something with c
你可以使用Python中的for循环
结构遍历几乎任何东西,例如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
使用参数"start": for i, c in enumerate('test', start=1)
。 - Messa更容易的方法:
for c in "test":
print c
for c in "test":
print(c)
为什么? - Mauro Vanetti只是为了给出更全面的答案,如果你真的想把一个方形钉子硬塞到圆孔中,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()
。 - izak你还可以做一些有趣的事情,比如使用for循环来完成工作。
#suppose you have variable name
name = "Mr.Suryaa"
for index in range ( len ( name ) ):
print ( name[index] ) #just like c and c++
答案是:
Mr. Suryaa
然而,由于range()创建的是值的列表,即序列,因此您可以直接使用名称。
for e in name:
print(e)
for i in range ( 5 ) :
can produce 0 , 1 , 2 , 3 , 4
2) len() - len() BIF 用于查找给定字符串的长度
>>> ''.join(map(lambda x: chr(ord(x)+1), "HAL"))
'IBM'
>>> ''.join(map(my_function, my_string))
这里的 my_function 接收一个 char 值,并返回一个 char 值。
这里有几个答案使用了range
。但是xrange
通常更好,因为它返回一个生成器,而不是完整实例化的列表。在内存和可迭代长度差别大的情况下,xrange
更加优秀。
您还可以执行以下操作:
txt = "Hello World!"
print (*txt, sep='\n')
这段代码不使用循环,但内部的print语句会处理它。
*
会将字符串解包为列表并将其发送到print语句中。
sep='\n'
将确保下一个字符在新行上打印。
输出结果如下:
H
e
l
l
o
W
o
r
l
d
!
for x in txt: print (x)
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