2016-11-10 60 views
-2

我试图使用具有1个预定义函数和1个参数的map函数。一切工作正常,直到我调用地图函数的list()。最后它显示使用map时的列表索引超出范围()

IndexError: list index out of range

但是,当我只是在不使用map()的情况下调用列表上的函数时,它是可以的。任何人都可以尝试并帮助我识别错误吗?


people = ['Dr. Christopher Brooks', 'Dr. Kevyn Collins-Thompson', 'Dr. VG Vinod Vydiswaran', 'Dr. Daniel Romero'] 

def split_title_and_name(person): 

    name_list=[] 

    for i in person: 
     i = i.split()[0]+" "+i.split()[-1] 
     name_list.append(i) 

    return name_list 

split_title_and_name(people) 
list(map(split_title_and_name, people)) 
+0

你可以修复你的缩进。 'map'接收每个人并应用函数'split_title_and_name()'。 'split_title_and_name('Chistopher Brooks博士')与发送名单清单非常不同。 – AChampion

+0

你的功能似乎是专门为可直接使用名称*而设计的。当然,如果你把它映射到'people',那么它会抛出一个错误,因为当你为'我亲自迭代'时,它遍历*单个名字*的单个*字符*。当'i'到达空间时,'split'返回并且空列表'[]'并且索引到一个空列表将抛出'IndexError' –

回答

0

你的功能split_title_and_name作品的人的名单,当你希望它在一个时间一个人工作:

def split_title_and_name(person): 
    return person.split()[0] + " " + person.split()[-1] 
1

这些都不是相同的功能。你的功能运行在一个人的列表上。 适用于各个元件。因此,你打电话

split_title_and_name('Dr. Christopher Brooks') 
split_title_and_name('Dr. Kevyn Collins-Thompson') 
... 

看到问题了吗?

0

这里是一个更好的解决方案:

people = ['Dr. Christopher Brooks', 'Dr. Kevyn Collins-Thompson', 'Dr. VG Vinod Vydiswaran', 'Dr. Daniel Romero'] 

def split_title_and_name(person): 
    title = person.split()[0] 
    lastname = person.split()[-1] 
    return '{} {}'.format(title, lastname) 

list(map(split_title_and_name, people)) 

看起来,当我用格式化功能不太复杂。