2012-10-13 61 views

回答

4

由於Python中的字符串是不可變的,每次使用replace()方法時都必須創建一個新的字符串。每次調用replace也必須遍歷整個字符串。這顯然是低效的,雖然在這個尺度上並不明顯。

一種替代方法是使用列表包含(docs,tutorial)循環一次字符串並創建新字符列表。 isalnum()方法可以用作測試,僅用於替換字母數字字符(即留下空格,標點符號等未改動)。

最後一步是使用join()方法將字符連接到新字符串中。請注意,在這種情況下,我們使用空字符串''將它們之間的任何內容連接在一起。如果我們使用' '.join(new_chars),則每個字符之間會有一個空格,或者如果我們使用'abc'.join(new_chars),則字母abc將位於每個字符之間。

>>> def random_function(string, replacement): 
...  new_chars = [replacement if char.isalnum() else char for char in string] 
...  return ''.join(new_chars) 
... 
>>> random_function('Hello how are you', 'x') 
'xxxxx xxx xxx xxx' 

當然,你應該把這個功能比random_function()一個更合乎邏輯的名字......

4

這可以用正則表達式可以輕鬆完成:

>>> re.sub('[A-Za-z]', 'x', 'Hello how are you') 
'xxxxx xxx xxx xxx' 
1
def hide(string, replace_with): 
    for char in string: 
     if char not in " !?.:;": # chars you don't want to replace 
      string = string.replace(char, replace_with) # replace char by char 
    return string 

print hide("Hello how are you", "x") 
'xxxxx xxx xxx xxx' 

還檢查了stringre模塊。

0

不知道我是否應該在註釋或整個答案補充呢?正如其他人所建議的,我會建議使用正則表達式,但是您可以使用\w字符來指代任何字母表中的字母。下面是完整的代碼:

import re 

def random_function(string): 
    newString=re.sub('\w', 'x', string) 
    return(newString) 

print(random_function('Hello how are you')) 

應打印XXXXX XXX XXX XXX

相關問題