尝试编写函数map()获取错误IndexError:列表索引超出范围

时间:2015-03-10 13:48:20

标签: python function dictionary python-3.4

我试图编写函数map()获取错误IndexError:列表索引超出范围

     def map1(fn, a):
         i = 0
         b = []
         while i != len(a):
             print(len(a))
             i += 1
             b.append(fn(a[i]))
         return b

具有工作功能

    def translate(x):
        dicti = {"merry": "god", "christmas": "jul", "and": "och", "happy": "gott", "new": "nytt", "year": "år"}
        return dicti[x]

得到了错误

     IndexError: list index out of range

2 个答案:

答案 0 :(得分:1)

在访问i之前,您需要增加a。在最后一次迭代中,i在循环体的开头是len(a)-1,然后递增到len(a),但这只是在有效索引范围之外。要修复它,您必须在访问后增加:

while i != len(a):
    b.append(fn(a[i]))
    i += 1

但是,改进的方法是使用range,它会自动为您生成i的正确值:

for i in range(len(a)):
    b.append(fn(a[i]))

更好的方法是直接迭代a的条目:

for x in a:
    b.append(fn(x))

更好的方式是使用列表理解:

b = [fn(x) for x in a]

答案 1 :(得分:1)

您在使用之前增加i的位置。

def map1(fn, a):
         i = 0
         b = []
         while i != len(a):
             print(len(a))

             b.append(fn(a[i]))
             i += 1
         return b

def translate(x):
        dicti = {"merry": "god", "christmas": "jul", "and": "och", "happy": "gott", "new": "nytt", "year": "ar"}
        return dicti[x]

map1(translate, ["merry", "and"])