2016-11-21 78 views
-2

我在我的計算機科學學位的第一年,我沒有編程背景,所以這可能是一個基本問題。如何爲列表編寫replace()函數

因此,我們的教授禁止在所有作業中使用replace()函數,因爲顯然它是「作弊」。我正在做一個分配,我必須使用替換函數,但由於我無法使用它,我只是創建了一個經歷列表中所有元素的for循環。舉個例子,如果我想替換「1」中出現的所有與「5」是清單,

for number in list_of_numbers: 
    if number == "1": 
     number = "5" 

它的工作,但我只是好奇,如果有做更有效的方式它沒有使用replace()? 感謝您的幫助。

+5

它沒有「完成工作」。你的代碼根本沒有效果。 –

+0

最好是讓自己的功能(你可以稱之爲my_replace),並試圖找出如何編寫替換功能 –

+0

_它的工作_你確定嗎?運行你的函數後,你打印list_of_numbers是否真的被改變? –

回答

1

你的方式可能是你的教授想要的方式。

你也可以使它成爲一個列表理解。它看起來像這樣

def f(x): 
    if x=="1": return "5" 
    else: return x 

list_of_numbers = [f(x) for x in list_of_numbers] 

我會確保你有的解決方案做你認爲它雖然。還要確保你實際上想要處理數字串,而不僅僅是整數本身。

+1

列表理解不等價,它會創建一個新列表。 OP的方式也行不通,所以可能不是他們的教授想要的。 – jonrsharpe

+1

此外,我懷疑有人正在尋找一個字符串。它應該可能是整數而不是! –

+0

修復@ jonrsharpe的公正批評,你可以在'list_of_numbers'中做'list_of_numbers [:] = [f(x)]' – acushner

0

你可以試試這個。

地圖(拉姆達X: '5',如果x == '1' 否則x,list_of_numbers)

順便說一句,你可以嘗試學習一些Python Lambda和地圖功能。它是有用的

+2

pythonic這樣做的方式是用list comp:'['5'if x = ='1'else x for list_of_numbers]' – acushner

+0

同樣,這*會創建一個新的列表*而不是修改列表,而不是**''.replace'。另外,正如acushner所說的那樣,這會更好地作爲列表理解。 –

0

這是一個教授想什麼:

n = len(list_of_numbers) 
for i in range(n): 
    if list_of_numbers[i]==1: list_of_numbers[i]=5 

print (list_of_numbers) 
0

你可以寫my_replace功能如下(它由n2列表l取代n1):

def my_replace(n1, n2, l): 
    for item in l: 
     if item == n1: 
      l[l.index(item)] = n2 

Outpout:

>>> list_of_numbers = [1, 2, 3, 1, 3, 4, 4, 5, 2, 1, 8, 7] 
>>> my_replace(1, 5, list_of_numbers) 
>>> list_of_numbers 
[5, 2, 3, 5, 3, 4, 4, 5, 2, 5, 8, 7] 

您也可以使用列表解析,以避免更新原始列表:

[x if x != 1 else 5 for x in list_of_numbers] 

輸出:

>>> [x if x != 1 else 5 for x in list_of_numbers] 
[5, 2, 3, 5, 3, 4, 4, 5, 2, 5, 8, 7]