使用Python迭代字符串中的每个字符

时间:2009-02-11 19:22:15

标签: python string iteration

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

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

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

如何在Python中迭代字符串?

10 个答案:

答案 0 :(得分:404)

正如约翰内斯指出的那样,

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()的对象

See official documentation

答案 1 :(得分:293)

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

>>> for i, c in enumerate('test'):
...     print i, c
... 
0 t
1 e
2 s
3 t

答案 2 :(得分:87)

更容易:

for c in "test":
    print c

答案 3 :(得分:36)

只是为了得到一个更全面的答案,迭代字符串的C方式可以在Python中应用,如果你真的想把一个方形的钉子插入一个圆孔。

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

但话又说回来,为什么当字符串固有地可迭代时呢?

for i in str:
    print i

答案 4 :(得分:4)

你也可以做这样有趣的事情并通过使用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 y r y a a

但是,由于range()创建了一个序列值列表,因此您可以直接使用名称

for e in name:
    print(e)

这也产生相同的结果,看起来也更好,适用于任何序列,如list,tuple和dictionary。

我们使用了两种内置函数(Python社区中的BIF)

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

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

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

答案 5 :(得分:3)

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

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

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

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

或更一般地说:

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

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

答案 6 :(得分:2)

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

答案 7 :(得分:2)

您可以将格式化的字符串文字(PEP498; Pyton 3.6+)与print一起使用,并进行序列拆包和enumerate

print(*(f'{idx} {char}' for idx, char in enumerate('Hello!')), sep='\n')

0 H
1 e
2 l
3 l
4 o
5 !

如果仅打印tuple个值,则不需要生成器表达式:

print(*enumerate('Hello!'), sep='\n')

(0, 'H')
(1, 'e')
(2, 'l')
(3, 'l')
(4, 'o')
(5, '!')

答案 8 :(得分:1)

您还可以执行以下操作:

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

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

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

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

输出将是:

H
e
l
l
o
 
W
o
r
l
d
!

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

for x in txt: print (x)

答案 9 :(得分:0)

如果您遇到需要get the next char of the word using __next__()的情况,请记住创建一个string_iterator并对其进行遍历,而不要遍历original string (it does not have the __next__() method)

在此示例中,当我找到一个char = [时,我一直在寻找下一个单词,而找不到],因此我需要使用__next __ < / em>

此处字符串的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