2014-09-22 36 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

相关问题