我尝试使用带有1个预先设定的函数和1个参数的map函数。一切正常,直到我在map函数上调用list()。最后它显示
IndexError:列表索引超出范围
但是当我只是在不使用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 :(得分:1)
这些功能不同。您的功能在人员列表上运行。 地图将该功能应用于人的每个元素。因此,您正在致电
split_title_and_name('Dr. Christopher Brooks')
split_title_and_name('Dr. Kevyn Collins-Thompson')
...
看到问题?
答案 1 :(得分:0)
您的功能split_title_and_name
适用于人员列表,当您希望它一次只能在一个人身上工作时:
def split_title_and_name(person):
return person.split()[0] + " " + person.split()[-1]
答案 2 :(得分: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))
当我使用格式化功能时,它看起来不那么复杂。
答案 3 :(得分:0)
以防万一,您打算在“ heavylifting”上使用该函数并希望避免重复的拆分调用...也许您应该首先尝试存储拆分后的字符串... try:-)
people = ['Dr. Christopher Brooks', 'Dr. Kevyn Collins-Thompson', 'Dr. VG Vinod Vydiswaran', 'Dr. Daniel Romero']
def split_title_and_name(person):
splitted_string = people.split()
title = splitted_string[0]
lastname = splitted_string[-1]
return '{} {}'.format(title, lastname)
list(map(split_title_and_name, people))