2017-04-25 86 views
-5

所以我有一個字符串,例如「AABBCCCASSDSFGDFGHDGHRTFBFIDHFDUFGHSIFUGEGFGNODN」。Python迭代字符串

我想能夠循環超過16個字符開始並打印它。然後向上移動1個字母,循環16個字符並打印。直到沒有剩餘16個字符。

任何幫助我如何做到這一點?

+10

你試過什麼嗎? –

+1

顯示預期的結果 – RomanPerekhrest

回答

2

像這樣的事情?

string = "AABBCCCASSDSFGDFGHDGHRTFBFIDHFDUFGHSIFUGEGFGNODN" 
for n in range(len(string)-15): 
    print(string[n:n+16]) 

你必須每個字符遍歷最多有16個字符後(因此字符串的長度,減去15(因爲索引從0開始):len(string)-15)的最後一個字符,然後打印字符串在該起始索引切片直到索引+ 16(string[n:n+16])。

切片是Python編程的一個重要和IMO強大的方面,如果您對語言(或通常編程)不熟悉,那麼這是一個很棒的閱讀,您絕對應該練習它。 The official docs有關於這個話題的一些很好的信息。

+1

您正在關閉 –

+0

@FabianN。謝謝。編輯。 –

0

如果我深知,你可能想要做這樣的事情:

a = "AABBCCCASSDSFGDFGHDGHRTFBFIDHFDUFGHSIFUGEGFGNODN" 

for i in range(len(a) - 15): 
    print(a[i:i+16]) 
+0

我沒有看到那個關閉 –

0

我會做:

str = "AABBCCCASSDSFGDFGHDGHRTFBFIDHFDUFGHSIFUGEGFGNODN" 

for i in range(len(str)): 
    if len(str[i:i+16]) == 16: 
     print(str[i:i+16]) 
    else: 
     break 
+0

這可能適用,但它涉及一個不必要的if-else-條件,對於非常長的字符串將是低效的(對多餘字符進行不必要的迭代並比較每次迭代的字符串長度),則不需要遍歷整個字符串並檢查if之後的長度是有效的。你可以通過迭代字符的一個子集來暗示正確的字符串長度(參見其他答案) –

+0

True。我也可以將字符串保存在一個變量中,所以我不會訪問它兩次。我只是試圖讓它自我解釋,但它不是什麼難事......哦,好吧! – TasosGlrs

+0

if語句可能被Python中更高效的try/except循環替換。 – funk

0

如何列表理解?

s = 'AABBCCCASSDSFGDFGHDGHRTFBFIDHFDUFGHSIFUGEGFGNODN' 
print [s[x:x+16] for x in range(len(s)-15)] 

['AABBCCCASSDSFGDF', 'ABBCCCASSDSFGDFG', 'BBCCCASSDSFGDFGH', 'BCCCASSDSFGDFGHD', 'CCCASSDSFGDFGHDG', 'CCASSDSFGDFGHDGH', 'CASSDSFGDFGHDGHR', 'ASSDSFGDFGHDGHRT', 'SSDSFGDFGHDGHRTF', 'SDSFGDFGHDGHRTFB', 'DSFGDFGHDGHRTFBF', 'SFGDFGHDGHRTFBFI', 'FGDFGHDGHRTFBFID', 'GDFGHDGHRTFBFIDH', 'DFGHDGHRTFBFIDHF', 'FGHDGHRTFBFIDHFD', 'GHDGHRTFBFIDHFDU', 'HDGHRTFBFIDHFDUF', 'DGHRTFBFIDHFDUFG', 'GHRTFBFIDHFDUFGH', 'HRTFBFIDHFDUFGHS', 'RTFBFIDHFDUFGHSI', 'TFBFIDHFDUFGHSIF', 'FBFIDHFDUFGHSIFU', 'BFIDHFDUFGHSIFUG', 'FIDHFDUFGHSIFUGE', 'IDHFDUFGHSIFUGEG', 'DHFDUFGHSIFUGEGF', 'HFDUFGHSIFUGEGFG', 'FDUFGHSIFUGEGFGN', 'DUFGHSIFUGEGFGNO', 'UFGHSIFUGEGFGNOD', 'FGHSIFUGEGFGNODN'] 
+0

理解是偉大的,但OP並不意味着他需要列表中的結果。如果是這種情況,那麼這是優雅的。 –

+0

@LennartKloppenburg好吧,他沒有暗示任何含糊不清的問題,所以我現在要堅持列表。 – alex

+0

我想這是有道理的;) –