2016-06-09 106 views
0

我對修改列表的輸入給出的兩個函數的行爲感到困惑。在我看來,兩者都應該做同樣的事情,但事實並非如此。請看:修改列表值

def headerFormat1(list1): 
    char_to_remove = ['(', ')'] 
    list2 = list1[:] 
    list1 = [] 
    for headers in list2: 
     headers = headers.replace(' ', '_') 
     for character in char_to_remove: 
      headers = headers.replace(character, '') 
     list1.append(headers) 
    del list2 
    return list1 

def headerFormat2(list1): 
    char_to_remove = ['(', ')'] 
    for i, headers in enumerate(list1): 
     list1[i] = headers.replace(' ', '_') 
     for character in char_to_remove: 
      list1[i] = headers.replace(character, '') 
    return list1 

theList = ['I want Underscores Instead', 'R(e(m(o(v(e()P)a)r)e)n)t)h)e)s)e)s', 'LetMeBe'] 
print(headerFormat1(theList)) #prints: ['I_want_Underscores_Instead', 'RemoveParentheses', 'LetMeBe'] 
print(headerFormat2(theList)) #prints: ['I want Underscores Instead', 'R(e(m(o(v(e(Parentheses', 'LetMeBe'] 

我的意思是好的,第一個工作,它應該altough我發現名單重複多餘的,可能沒有必要\矯枉過正

但第二個(?)。 。圓括號去除有什麼奇怪的東西?此外,即使它不能正常工作,它也暗示修改列表元素就地是可能的(刪除')'),但爲什麼不替換空格?

謝謝。

回答

1

你正在改變list1的[I]與原標題 檢查下面的代碼,每次它的工作原理

def headerFormat1(list1): 
    char_to_remove = ['(', ')'] 
    list2 = list1[:] 
    list1 = [] 
    for headers in list2: 
     headers = headers.replace(' ', '_') 
     for character in char_to_remove: 
      headers = headers.replace(character, '') 
     list1.append(headers) 
    del list2 
    return list1 

def headerFormat2(list1): 
    char_to_remove = ['(', ')'] 
    for i, headers in enumerate(list1): 
     headers = headers.replace(' ', '_') 
     for character in char_to_remove: 
      headers = headers.replace(character, '') 
     list1[i]=headers 
    return list1 

theList = ['I want Underscores Instead', 'R(e(m(o(v(e()P)a)r)e)n)t)h)e)s)e)s', 'LetMeBe'] 
print(headerFormat1(theList)) 
print(headerFormat2(theList)) 
+0

因此,即使頭= headers.replace(」 ' '_')和headers.replace(' ','_')返回相同的值,但僅在第一種情況下才會更新標題。 ofc ...謝謝!一個看上去很好看的列表理解現在是目標,但我會嘗試單獨解決這個問題。 –