2014-09-22 63 views
0

指令: get_name_list()函數返回參數name_list中所有名稱的列表,其中參數:to_look_for中提供了一個給定的字母。'append()'和沒有方括號的列表元素之間的區別

問題:如果我刪除'a_list + = [name]'表達式中的'name'的方括號,它將顯示以下錯誤輸出。但是,如果使用方括號或'append()'方法,則會生成正確的輸出(下面的第二個正確輸出)。我想知道爲什麼沒有[名稱]中的方括號,正確的輸出不會產生?

錯誤輸出:

names with d ['J', 'a', 'd', 'e'] 
names with k ['M', 'i', 'k', 'e', 'y'] 

錯誤代碼:

def main(): 
    names = ["Jasper", "Jade", "Mikey", "Giani"] 
    names_d = get_name_list(names, "d") 
    names_k = get_name_list(names, "k") 
    print("names with d", names_d) 
    print("names with k", names_k) 

    def get_name_list(name_list, to_look_for): 

     a_list = [] 
     for name in name_list: 
      #print(name) 
      if to_look_for in name: 
       print(name) 
       a_list += name 
       #a_list.append(name) 

     return a_list 

    main() 

正確的輸出:

names with d ['Jade'] 
names with k ['Mikey'] 

正確的代碼:

def main(): 
    names = ["Jasper", "Jade", "Mikey", "Giani"] 
    names_d = get_name_list(names, "d") 
    names_k = get_name_list(names, "k") 
    print("names with d", names_d) 
    print("names with k", names_k)  

def get_name_list(name_list, to_look_for): 

    a_list = [] 
    for name in name_list: 
     #print(name) 
     if to_look_for in name: 
      print(name) 
      #a_list += name 
      a_list.append(name) 

    return a_list 

main() 

回答

3

'+ =' 運算等於列表的extend()內置方法。它會改變價值權利,首先等待簽名,然後再延長。

你的情況:

a_list += name # which is the same as a_list.extend(name), although name is a string, it will be converted to a list first 

當一個字符串轉換成一個列表,它會像改變'abc'['a', 'b', 'c']。這就是你的['J', 'a', 'd', 'e']來自

+0

嗨,謝謝你的回答。我有種想法:當一個字符串轉換爲一個列表時,它會像'abc'改變爲['a','b','c']一樣。一個問題:'name'是列表中的一個元素:'name_list',因此'name'應該是一個不是字符串的列表。我想知道爲什麼'名稱'是一個字符串? – jmk 2014-09-22 06:28:13

+0

@jmk'name_list中的名字'表示您將name_list中的每個元素分配給變量名稱。並且name_list中的每個元素都是一個字符串。你可以檢查類型(name_list [0])。例如,如果您希望將第一個元素作爲列表,則應該使用name_list [0:1]。 – 2014-09-22 06:40:05

相關問題