簡體   English   中英

替換列表中的元素沒有列表理解,切片或使用[] s

[英]Replacing element in list without list comprehension, slicing or using [ ]s

我正在參加這個在線Python課程 ,他們不喜歡使用單行解決方案的學生。 該課程不接受此解決方案的括號。

我已經使用列表理解解決了問題,但課程拒絕了我的答案。

問題是:

使用index和其他清單方法,編寫一個函數replace(list, X, Y)它取代所有出現的XlistY 例如,如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM