簡體   English   中英

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

[英]Iterating each character in a string using Python

我如何在 Python 中迭代一個字符串(從字符串中獲取每個字符,一次一個,每次通過一個循環)?

正如約翰內斯指出的那樣,

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

看官方文檔

如果在遍歷字符串時需要訪問索引,請使用enumerate()

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

更簡單:

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 循環來完成你的工作

#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 值。

這里的幾個答案使用range xrange通常更好,因為它返回一個生成器,而不是一個完全實例化的列表。 在內存和/或長度變化很大的可迭代對象可能成為問題的地方, xrange更勝一籌。

您可以使用帶有print和序列解包的格式化字符串文字( PEP498 ; Pyton 3.6+)並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, '!')

您還可以執行以下操作:

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

這不使用循環,但內部 print 語句會處理它。

*將字符串解包到一個列表中並將其發送到 print 語句

sep='\n'將確保下一個字符打印在新行上

輸出將是:

H
e
l
l
o
 
W
o
r
l
d
!

如果您確實需要循環語句,那么正如其他人提到的那樣,您可以像這樣使用 for 循環:

for x in txt: print (x)

如果您在需要get the next char of the word using __next__()情況下運行,請記住創建一個string_iterator並迭代它而不是original string (it does not have the __next__() method)

在這個例子中,當我找到一個 char = [ I keep looking into the next word while I don't find ] ,所以我需要使用 __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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM