[英]Replacing element in list without list comprehension, slicing or using [ ]s
我正在參加這個在線Python課程 ,他們不喜歡使用單行解決方案的學生。 該課程不接受此解決方案的括號。
我已經使用列表理解解決了問題,但課程拒絕了我的答案。
問題是:
使用
index
和其他清單方法,編寫一個函數replace(list, X, Y)
它取代所有出現的X
在list
與Y
。 例如,如果L = [3, 1, 4, 1, 5, 9]
則replace(L, 1, 7)
將L
的內容改變為[3, 7, 4, 7, 5, 9]
。 要使此練習成為一項挑戰,您不能使用[]
。注意:您不需要使用return。
這是我到目前為止,但由於TypeError而中斷:'int'對象不可迭代。
list = [3, 1, 4, 1, 5, 9]
def replace(list, X, Y):
while X in list:
for i,v in range(len(list)):
if v==1:
list.remove(1)
list.insert(i, 7)
replace(list, 1, 7)
這是我原來的答案,但遭到拒絕。
list = [3, 1, 4, 1, 5, 9]
def replace(list, X, Y):
print([Y if v == X else v for v in list])
replace(list, 1, 7)
關於如何修復我的更長解決方案的任何想法?
range()
返回一個整數的平面列表,因此您無法將其解壓縮為兩個參數。 使用enumerate
獲取索引和值元組:
def replace(l, X, Y):
for i,v in enumerate(l):
if v == X:
l.pop(i)
l.insert(i, Y)
l = [3, 1, 4, 1, 5, 9]
replace(l, 1, 7)
如果您不允許使用enumerate
,請使用普通的舊計數器:
def replace(l, X, Y):
i = 0
for v in l:
if v == X:
l.pop(i)
l.insert(i, Y)
i += 1
l = [3, 1, 4, 1, 5, 9]
replace(list, 1, 7)
最后,你可以使用問題的作者可能正在尋找的東西(盡管這是最低效的方法,因為它在每次迭代時線性搜索列表):
def replace(l, X, Y):
for v in l:
i = l.index(v)
if v == X:
l.pop(i)
l.insert(i, Y)
l = [3, 1, 4, 1, 5, 9]
replace(l, 1, 7)
您也可以嘗試這個(不要使用[]
s或enumerate()
,如果需要):
for i in range(len(l)): # loop over indices
if l.__index__(i) == X: # i.e. l[i] == X
l.__setitem__(i, Y) # i.e. l[i] = Y
這可能不是作業要求你做的,但我會把它留在這里用於學習目的。
注意:您不應該使用list
作為變量名,因為它已經被內置函數使用。 我在這里用過l
。
如果不允許enumerate
,您還可以使用while
循環。
>>> def replace(L_in, old_v, new_v):
while old_v in L_in:
idx=L_in.index(old_v)
L_in.pop(idx)
L_in.insert(idx, new_v)
>>> L = [3, 1, 4, 1, 5, 9]
>>> replace(L, 1, 7)
>>> L
[3, 7, 4, 7, 5, 9]
不要使用list
作為名稱,它會給你帶來很大的痛苦。
def replace(my_list, X, Y):
while X in my_list:
my_list.insert(my_list.index(X), Y)
my_list.pop(my_list.index(X))
這對我有用。 挺直的。 可能是一種用較少的線條來實現它的方法,但是基於到目前為止在網站上所教授的內容,這是有效的。
def replace(L, X, Y):
while X in L:
i = L.index(X)
L.insert(i, Y)
L.remove(X)
完全同意Asad Saeeduddin但是,i的第一個值必須為-1,它將有助於替換列表中的第一個對象
def replace(l, X, Y):
i = -1
for v in l:
i += 1
if v == X:
l.pop(i) # remove item at given position (position number i)
l.insert(i, Y) # insert item Y at position i
l = [1, 1, 4, 1, 5, 9]
replace(l, 1, 7)
print(l)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.