2016-03-04 127 views
5

我需要創建一個接受參數(字符,stringOne,stringTwo)的函數。該函數返回一個新的單詞,其中包含與stringTwo + stringOne中相同位置的任何字符相同的數據。從字符串1替換字符到字符串2

例子:

  • stringOne = 「蘋果」
  • stringTwo = 「12345」
  • 字符= 「P」
  • 應返回 「1pp45」

我丟失我應該如何着手。

def replace(char, word1, word2): 
newWord = "" 
for s in range(len(word1)): 
    if word1[s] == char: 
return 
+4

您應該修復代碼示例的縮進。 – Carpetsmoker

回答

2

這裏是如何使之你想要做什麼修改現有的代碼。我已將newWord更改爲new_word以符合標準的Python風格約定。

def replace(char, word1, word2): 
    new_word = "" 
    for i in range(len(word2)): 
     if word1[i] == char: 
      new_word += char 
     else: 
      new_word += word2[i] 
    return new_word 

# Test 
print(replace("p", "apple", "12345"))  

輸出

1pp45 

注意,該代碼將引發IndexError: string index out of range異常,如果word1word2短。

實現此功能有多種更好的方法。首先,我們可以使用zip函數並行地遍歷兩個字符串的字符。這比使用字符串索引訪問字符的間接迭代更清潔一些。

def replace(char, word1, word2): 
    new_word = "" 
    for c1, c2 in zip(word1, word2): 
     if c1 == char: 
      new_word += char 
     else: 
      new_word += c2 
    return new_word 

注意,如果字符串是不一樣的長度,然後zip將正常時,較短的字符串結束停止。

通過用條件表達式替換if... else塊,我們可以使代碼更加緊湊。

def replace(char, word1, word2): 
    new_word = "" 
    for c1, c2 in zip(word1, word2): 
     new_word += char if c1 == char else c2 
    return new_word 

一個更高級的版本使用列表理解來構建所需的字符列表和字符串.join方法到列表轉換成一個字符串。

def replace(char, word1, word2): 
    return ''.join([char if c1 == char else c2 
     for c1, c2 in zip(word1, word2)]) 

也可以使用生成器表達式來做到這一點。

''.join(char if c1 == char else c2 for c1, c2 in zip(word1, word2)) 

但是這比使用列表解析效率較低,原因在於.join的工作方式。 .join必須兩次掃描其參數:第一次掃描用於計算輸出字符串的總大小,第二次掃描執行實際加入。但是你不能掃描發生器兩次,所以如果你通過一個發生器.join它必須從發生器建立一個臨時列表。

1

您還可以使用列表理解,迭代和替換。

>>> x, y, c = 'apple', '12345', 'p'    
>>> ''.join([c if x[i] == c else s for i, s in enumerate(y)]) 
'1pp45' 
+0

這不是我要展示給那些努力學習編程的人的代碼。 – Carpetsmoker

1

Python的方式:

>>> stringOne = "apple" 
>>> stringTwo = "12345" 
>>> my_char = "p" 
>>> "".join([x[1] if my_char!=x[0] else x[0] for x in zip(stringOne, stringTwo)]) 
'1pp45' 
5

繼續你做了什麼,使用簡單for-loop和三元的操作,這是怎麼可以做到:

def replace(char, word1, word2): 
    newWord = "" 
    for s in range(len(word1)): 
     newWord += char if word1[s] == char else word2[s] 
    return newWord 

即相當於:

def replace(char, word1, word2): 
    newWord = "" 
    for s in range(len(word1)): 
     if word1[s] == char: 
      newWord += char 
     else: 
      newWord += word2[s] 
    return newWord 

以防萬一您不熟悉三元操作。

1
def replace(char, word1, word2): 
    newWord= list(word2) 
    for counter in range(min(len(word1), len(word2))): 
      if word1[counter]== char: 
        newWord[counter]= char 
    return "".join(newWord) 
0

最簡單的解決辦法是通過字詞1的字符進行迭代,如果一個字符匹配發現與我們有興趣在尋找的字符,然後我們在WORD2該索引處替換的字符。

def replace(char, word1, word2): 
    newWord = "" 
    word2List = list(word2) 
    # Check is character is present in word1 
    # and if length of word1 and word2 are equal 
    if char not in word1 or len(word1) != len(word2): 
     return False 
    else: 
     for i,c in enumerate(word1): 
      if c == char: 
       word2List[i] = c 



    # Converting list back to string 
    return ''.join(word2List) 

print(replace('p','apple','12345')) 

輸出:

1pp45