548

在 C++ 中,我可以像这样迭代std::string

std::string str = "Hello World!";

for (int i = 0; i < str.length(); ++i)
{
    std::cout << str[i] << std::endl;
}

如何在 Python 中遍历字符串?

4

9 回答 9

483

正如约翰内斯所指出的,

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()

见官方文档

于 2009-02-11T19:30:23.810 回答
328

如果您在遍历字符串时需要访问索引,请使用enumerate()

>>> for i, c in enumerate('test'):
...     print i, c
... 
0 t
1 e
2 s
3 t
于 2010-12-28T16:54:32.510 回答
93

更容易:

for c in "test":
    print c
于 2009-02-11T19:24:12.077 回答
39

只是为了做出更全面的答案,如果您真的想将方形钉子强制插入圆孔,则 C 迭代字符串的方法可以在 Python 中应用。

i = 0
while i < len(str):
    print str[i]
    i += 1

但是话又说回来,当字符串本质上是可迭代的时,为什么要这样做呢?

for i in str:
    print i
于 2009-02-17T05:36:55.683 回答
7

那么你也可以做一些像这样有趣的事情并通过使用 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 社区中的 BIF)

1) range() - range() BIF 用于创建索引示例

for i in range ( 5 ) :
can produce 0 , 1 , 2 , 3 , 4

2) len() - len() BIF 用于找出给定字符串的长度

于 2017-05-20T14:18:45.027 回答
5

如果您想使用更实用的方法来迭代字符串(可能以某种方式对其进行转换),您可以将字符串拆分为字符,对每个字符应用一个函数,然后将生成的字符列表连接回字符串。

字符串本质上是一个字符列表,因此 'map' 将遍历字符串 - 作为第二个参数 - 将函数 - 第一个参数 - 应用于每个参数。

例如,这里我使用了一个简单的 lambda 方法,因为我想做的只是对字符进行微不足道的修改:在这里,增加每个字符的值:

>>> ''.join(map(lambda x: chr(ord(x)+1), "HAL"))
'IBM'

或更一般地说:

>>> ''.join(map(my_function, my_string))

其中 my_function 接受一个 char 值并返回一个 char 值。

于 2015-12-18T11:11:28.640 回答
2

这里有几个答案使用range. xrange通常更好,因为它返回一个生成器,而不是一个完全实例化的列表。在内存和/或长度变化很大的迭代可能成为问题的情况下,xrange这是优越的。

于 2017-09-27T03:20:27.800 回答
1

您还可以执行以下操作:

txt = "Hello World!"
print (*txt, sep='\n')

这不使用循环,但内部 print 语句会处理它。

*将字符串解包到列表中并将其发送到打印语句

sep='\n'将确保下一个字符打印在新行上

输出将是:

H
e
l
l
o
 
W
o
r
l
d
!

如果您确实需要循环语句,那么正如其他人所提到的,您可以使用这样的 for 循环:

for x in txt: print (x)
于 2021-01-09T08:53:40.913 回答
0

如果您曾经在需要的情况下运行get the next char of the word using __next__(),请记住创建 astring_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
于 2020-04-29T03:15:20.333 回答