使用 Python 迭代字符串中的每个字符
- 2025-01-17 09:23:00
- admin 原创
- 85
问题描述:
如何在 Python 中迭代字符串(每次通过循环从字符串中获取每个字符,每次一个)?
解决方案 1:
正如约翰内斯指出的那样,
for c in "string":
#do something with c
你可以使用以下结构在 Python 中迭代几乎任何东西for loop
,
例如,open("file.txt")
返回一个文件对象(并打开该文件),对其进行迭代,迭代该文件中的行
with open(filename) as f:
for line in f:
# do something with line
如果这看起来像魔术,那么它确实有点像,但其背后的想法其实很简单。
有一个简单的迭代器协议,可以应用于任何类型的对象以使循环for
在其上工作。
只需实现一个定义next()
方法的迭代器,并__iter__
在类上实现方法,使其可迭代即可。(当然__iter__
,应该返回一个迭代器对象,即定义的对象next()
)
参见官方文档
解决方案 2:
如果在遍历字符串时需要访问索引,请使用enumerate()
:
>>> for i, c in enumerate('test'):
... print i, c
...
0 t
1 e
2 s
3 t
解决方案 3:
甚至更简单:
for c in "test":
print c
解决方案 4:
为了做出更全面的回答,如果您真的想将方形钉子插入圆孔中,则可以在 Python 中应用 C 语言中迭代字符串的方式。
i = 0
while i < len(str):
print str[i]
i += 1
但是话又说回来,既然字符串本质上是可迭代的,为什么还要这样做呢?
for i in str:
print i
解决方案 5:
好吧,你也可以做一些有趣的事情,比如这个,并使用 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 用于找出给定字符串的长度
解决方案 6:
如果您想使用更实用的方法来迭代字符串(也许以某种方式对其进行转换),您可以将字符串拆分为字符,对每个字符应用一个函数,然后将生成的字符列表重新合并为字符串。
字符串本质上是字符列表,因此“map”将遍历字符串 - 作为第二个参数 - 将函数 - 第一个参数 - 应用于每个字符串。
例如,这里我使用了一个简单的 lambda 方法,因为我想要做的只是对字符进行简单的修改:这里,增加每个字符的值:
>>> ''.join(map(lambda x: chr(ord(x)+1), "HAL"))
'IBM'
或者更一般地:
>>> ''.join(map(my_function, my_string))
其中 my_function 接受一个 char 值并返回一个 char 值。
解决方案 7:
这里的几个答案都使用了range
。 xrange
通常来说,它返回的是生成器,而不是完全实例化的列表。当内存和/或长度变化很大的可迭代对象可能成为问题时,xrange
这种方法更胜一筹。
解决方案 8:
您还可以执行以下操作:
txt = "Hello World!"
print (*txt, sep='
')
这不使用循环,而是内部打印语句来处理它。
*
将字符串解包成列表并将其发送到打印语句
`sep='
'`将确保下一个字符打印在新行上
输出将是:
H
e
l
l
o
W
o
r
l
d
!
如果确实需要循环语句,那么正如其他人提到的,您可以使用这样的 for 循环:
for x in txt: print (x)
解决方案 9:
如果你遇到需要的情况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