def palindrome(s,index):
output=s[index]
for before,after in zip(s[:index][::-1],s[index+1:]):
if before==after:
output=before+output+after
else: break
if output==s[index]: return ''
else: return output
>>> palindrome('youtubecat',3)
'utu'
的for
環向外s[index]
循環。所以before
通過'uoy'
(you
反轉,因此[::-1]
反向拼接)和after
循環通過'ube'
。雖然before
和after
是相同的,但它被追加到s[index]
。只要它們不一樣,它就會返回輸出。如果不能從index
位置創建迴文,則返回empy字符串。
正是這樣很明顯,after
不是通過'ubecat'
循環,因爲當你zip
兩個對象必須是相同的長度,這就是爲什麼它截斷爲'ube'
。
>>> palindrome('racecar',3)
'racecar'
如果情況不是問題(即'A'='a'
),然後使用在if
聲明lower()
方法:
if before.lower()==after.lower()
如果你想要一個替代的方式來做到這一點:
def palindrome(s,index):
mirror=min([len(s[:index]),len(s[index+1:])])
s=s[index-mirror:index]+s[index:index+mirror+1]
while s:
if len(s)==1: return ''
if s==s[::-1]: return s # check if it's a palindrome
else: # if not, remove the first and last char
s=s[1:-1]
來源
2016-11-10 23:22:34
LMc
提示:你沒有循環任何事情。如果您只有一個,那麼您的代碼不會返回任何內容,一個字母或5個字母。 – matanso
@matanso謝謝你的提示,但我不能找出一種循環方式 – CAVS
('我應該返回一個給定的索引迴文'有'[index:index + 1]':)請指定什麼迴文返回:從索引處開始最長?最長以索引爲中心?還有別的嗎? – greybeard