我如何在Python中迭代一个字符串(从字符串中获得每个字符,一次一个,每次通过循环)?
当前回答
如果您希望使用更函数化的方法来迭代字符串(也许以某种方式转换它),您可以将字符串分割为字符,对每个字符应用一个函数,然后将生成的字符列表连接回字符串。
字符串本质上是一个字符列表,因此'map'将迭代字符串-作为第二个参数-将函数-第一个参数-应用到每个字符串。
例如,这里我使用一个简单的lambda方法,因为我想做的只是对字符进行简单的修改:这里,增加每个字符值:
>>> ''.join(map(lambda x: chr(ord(x)+1), "HAL"))
'IBM'
或者更一般地说:
>>> ''.join(map(my_function, my_string))
其中my_function接受一个char值并返回一个char值。
其他回答
约翰内斯指出,
for c in "string":
#do something with c
你可以使用for循环构造在python中迭代几乎任何东西,
例如,open("file.txt")返回一个文件对象(并打开文件),遍历该文件中的行
with open(filename) as f:
for line in f:
# do something with line
如果这看起来像魔法,好吧,它有点像,但它背后的想法真的很简单。
有一个简单的迭代器协议,可以应用于任何类型的对象,使for循环在它上工作。
只需实现一个定义next()方法的迭代器,并在类上实现__iter__方法,使其可迭代。(__iter__当然应该返回一个迭代器对象,即定义了next()的对象)
参见官方文件
更简单:
for c in "test":
print c
如果您希望使用更函数化的方法来迭代字符串(也许以某种方式转换它),您可以将字符串分割为字符,对每个字符应用一个函数,然后将生成的字符列表连接回字符串。
字符串本质上是一个字符列表,因此'map'将迭代字符串-作为第二个参数-将函数-第一个参数-应用到每个字符串。
例如,这里我使用一个简单的lambda方法,因为我想做的只是对字符进行简单的修改:这里,增加每个字符值:
>>> ''.join(map(lambda x: chr(ord(x)+1), "HAL"))
'IBM'
或者更一般地说:
>>> ''.join(map(my_function, my_string))
其中my_function接受一个char值并返回一个char值。
只是做一个更全面的回答,如果你真的想把一个方钉子塞进一个圆洞里,可以在Python中应用C语言迭代字符串的方式。
i = 0
while i < len(str):
print str[i]
i += 1
但话说回来,当字符串本质上是可迭代的时,为什么要这样做呢?
for i in str:
print i
如果你曾经在需要使用__next__()获取单词的下一个字符的情况下运行,请记住创建一个string_iterator并遍历它而不是原始字符串(它没有__next__()方法)
在这个例子中,当我找到一个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