我试图编写函数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
答案 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"])