2016-09-09 57 views
0

通過這段代碼,我希望將出現在字符串s中的所有點(.)替換爲出現在對稱位置上的字符。爲例如:在Python中輸出錯誤輸出的函數

i個位置的元素應該由元件在len(s)-i-1個位置被替換爲:如果s=a.bcdcbba,則.應由b

即替換。此功能給g....,.g...等情況提供了錯誤的輸出。任何幫助?

def replacedots(s): 

    for i in range(0,len(s)): 
     if s[i]==".": 
       s=s.replace(s[i],s[len(s)-i-1],1) 

    return s  
+2

約' 「foo.bar」'什麼? –

+0

你是指點之後的字符嗎? –

+0

這是因爲's.replace'不會替代'i'處的點,而是第一個點。 –

回答

1

@ chepner的方式:

def replacedots(s): 
    return ''.join(x if x !='.' else y for x, y in zip(s, reversed(s))) 

一種替代方案:

def replacedots(s): 
    return ''.join(c if c != '.' else s[-i - 1] for i, c in enumerate(s)) 

i位置的字符,並在len(s) - i - 1位置的字符是.點仍將是一個點。

例子:

s = "foo.bar" 
+1

不錯!但是不是'[-i-1]'就足以得到相反的字符? –

+0

當然,謝謝(下次可以隨意編輯一個你可以改進的答案):) :) –

+1

Some - me:) - 如果x!=''可能會發現它更簡潔。否則y代表x,y代表zip(s,reverse(s))'並避免直接索引。無論哪種方式,將列表理解而不是生成器傳遞給'''.join'會更快。 (奇怪的是,當使用生成器時,'zip'版本比''enumerate'版本更快,但當兩者都用作列表解析時,則不會。')。 – chepner