使用map()时列表索引超出范围

时间:2016-11-10 02:43:17

标签: python list dictionary indexing split

我尝试使用带有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))

4 个答案:

答案 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))