首页 文章

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

提问于
浏览
442

在C中,我可以迭代 std::string ,如下所示:

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

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

如何在Python中迭代字符串?

8 回答

  • 82

    更容易:

    for c in "test":
        print c
    
  • 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, '!')
    
  • 34

    那么你也可以做这样有趣的事情,并通过使用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)
    

    这也产生相同的结果,并且看起来更好,并且可以使用任何序列,如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用于找出给定字符串的长度

  • 3

    这里有几个答案使用 range . xrange 通常更好,因为它返回一个生成器,而不是一个完全实例化的列表 . 如果内存和/或长度变化很大的迭代可能成为一个问题,那么 xrange 就更胜一筹了 .

  • 357

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

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

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

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

    或更一般地说:

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

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

  • 3

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

    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

  • 278

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

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

    但话又说回来,为什么字符串本身可以迭代?

    for i in str:
        print i
    
  • 0

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

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

相关问题