我如何在Python中迭代字符串(从字符串中获得每个字符,一次一个,每次通过循环)?
更简单:
for c in "test": print c
约翰内斯指出,
for c in "string": #do something with c
你可以使用for loop构造迭代python中的任何东西,
for loop
例如,open("file.txt")返回一个文件对象(并打开文件),遍历它就是遍历该文件中的行
open("file.txt")
with open(filename) as f: for line in f: # do something with line
如果这看起来像魔法,好吧,它有点像,但它背后的想法真的很简单。
有一个简单的迭代器协议,可以应用于任何类型的对象,使for循环在其上工作。
for
只需实现一个定义了next()方法的迭代器,并在类上实现一个__iter__方法,使其可迭代。(当然,__iter__应该返回一个迭代器对象,即定义了next()的对象)
next()
__iter__
参见正式文档 . 参见正式文档
只是做一个更全面的回答,如果你真的想把一个方钉子塞进一个圆洞里,可以在Python中应用C语言迭代字符串的方式。
i = 0 while i < len(str): print str[i] i += 1
但话说回来,当字符串本质上是可迭代的时,为什么要这样做呢?
for i in str: print i
如果在遍历字符串时需要访问索引,请使用enumerate():
enumerate()
>>> for i, c in enumerate('test'): ... print i, c ... 0 t 1 e 2 s 3 t
如果您希望使用更函数化的方法来迭代字符串(也许以某种方式转换它),您可以将字符串分割为字符,对每个字符应用一个函数,然后将生成的字符列表连接回字符串。
字符串本质上是一个字符列表,因此'map'将迭代字符串-作为第二个参数-将函数-第一个参数-应用到每个字符串。
例如,这里我使用一个简单的lambda方法,因为我想做的只是对字符进行简单的修改:这里,增加每个字符值:
>>> ''.join(map(lambda x: chr(ord(x)+1), "HAL")) 'IBM'
或者更一般地说:
>>> ''.join(map(my_function, my_string))
其中my_function接受一个char值并返回一个char值。
你还可以做一些有趣的事情通过使用for循环来完成工作
#suppose you have variable name name = "Mr.Suryaa" for index in range ( len ( name ) ): print ( name[index] ) #just like c and c++
答案是
M r。S u y a a
然而,由于range()创建了一个序列值列表,因此您可以直接使用该名称
for e in name: print(e)
这也会产生相同的结果,而且看起来更好,适用于任何序列,如列表、元组和字典。
我们已经使用了两个内置函数(Python社区中的bif)
1) range() - range() BIF用于创建索引 示例< / p >
for i in range ( 5 ) : can produce 0 , 1 , 2 , 3 , 4
2) len() - len() BIF用于找出给定字符串的长度
这里有几个答案使用range。xrange通常更好,因为它返回一个生成器,而不是一个完全实例化的列表。当内存和或可迭代对象的长度大不相同时,xrange是更好的选择。
range
xrange
如果您曾经在需要get the next char of the word using __next__()的情况下运行,请记住创建string_iterator并遍历它,而不是original string (it does not have the __next__() method)
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
您还可以执行以下操作:
txt = "Hello World!" print (*txt, sep='\n')
这并不使用循环,但内部打印语句照顾它。
*将字符串解包到一个列表中,并将其发送给print语句
*
sep='\n'将确保下一个字符打印在新行上
sep='\n'
输出将是:
H e l l o W o r l d !
如果你确实需要一个循环语句,那么就像其他人提到的,你可以像这样使用for循环:
for x in txt: print (x)