Answers:
正如约翰内斯指出的那样,
for c in "string":
#do something with c
您可以使用struct迭代python中的几乎所有内容for loop
,
例如,open("file.txt")
返回文件对象(并打开文件),对其进行迭代,然后对该文件中的行进行迭代
with open(filename) as f:
for line in f:
# do something with line
如果那看起来像魔术,那还算不错,但是它背后的想法真的很简单。
有一个简单的迭代器协议可以应用于任何对象,以使for
循环在其上起作用。
只需实现定义一个next()
方法的迭代器,然后__iter__
在类上实现一个方法使其可迭代即可。(__iter__
当然,应返回一个迭代器对象,即定义的对象next()
)
如果在遍历字符串时需要访问索引,请使用enumerate()
:
>>> for i, c in enumerate('test'):
... print i, c
...
0 t
1 e
2 s
3 t
1 t
,2 e
,3 s
,4 t
使用参数“开始”:for i, c in enumerate('test', start=1)
更简单:
for c in "test":
print c
for c in "test": print (c)
为什么?
只是为了做出更全面的回答,如果您确实想将方钉强行塞入圆孔中,则对字符串进行迭代的C方法可以在Python中应用。
i = 0
while i < len(str):
print str[i]
i += 1
但是话又说回来,当字符串具有固有的可迭代性时,为什么要这样做呢?
for i in str:
print i
for i in range(len(...))
是邪恶的。在python 2.x中,range()
创建一个列表,因此对于很长的长度,您可能最终会分配很大的内存块。至少xrange()
在这些情况下使用。同样,重复索引同一字符串比直接在字符串上迭代慢得多。如果需要索引,请使用enumerate()
。
好吧,您也可以像这样做一些有趣的事情,并通过使用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用于找出给定字符串的长度
如果您想使用一种更实用的方法遍历字符串(可能以某种方式进行转换),则可以将字符串拆分为字符,对每个函数应用一个函数,然后将所得的字符列表重新组合为字符串。
字符串本质上是一个字符列表,因此“ map”将遍历字符串-作为第二个参数-将函数-第一个参数应用于每个参数。
例如,这里我使用一种简单的lambda方法,因为我要做的只是对字符的微不足道的修改:在这里,增加每个字符的值:
>>> ''.join(map(lambda x: chr(ord(x)+1), "HAL"))
'IBM'
或更一般而言:
>>> ''.join(map(my_function, my_string))
其中my_function接受一个char值并返回一个char值。
如果您曾经在需要的情况下运行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