[英]Map and lambda function
我目前正在处理hackerrank问题。
目的是找到前n
斐波那契数的立方。 用户输入n
。 因此,例如,如果用户输入5,则输出应为[0、1、1、8、27],因为前五个斐波那契数为[0、1、1、2、3]。
我编写了以下代码:
cube = lambda x: x**3 # complete the lambda function
def fibonacci(n):
# return a list of fibonacci numbers
initiallist = []
for i in range(n):
if i < 2:
initiallist += [i]
else:
initiallist += [initiallist[-1] + initiallist[-2]]
return initiallist
我得到了以下代码(无法编辑):
if __name__ == '__main__':
n = int(input())
print(map(cube, fibonacci(n)))
问题是我的代码未能通过测试用例,因为它返回的是地图对象而不是列表。 我如何确保它返回列表?
只需添加list()
,
if __name__ == '__main__':
n = int(input())
print(list(map(cube, fibonacci(n))))
我不删除评论,因为这是map对象的解决方案,我认为您不能在实际调用之前对其进行修改。 正如Ewoud所说, map
函数在python3和python2中的作用不同。
您可以在它周围放上list(...),这样
print(list(map(cube, fibonacci(n))))
(我尚未测试您的其余代码)
编辑:如果您不打算更改主要功能,则必须更改打印或地图功能或使用python 2。
如果您无法编辑main函数,请使用Python2.X而不是Python3.x。 在Python3.x中,map()函数返回迭代器。
这应该给您带来超出您需要的更多东西。 我添加了一些额外的内容,例如循环和输入验证,以防万一。 希望这可以帮助
通式F(n)= F(n-1)+ F(n-2)
获取用户输入
def get_user_input():
while True:
try:
nums_in_list = int(input("Enter the amout of numbers you want in the fibonacci list: "))
if nums_in_list < 1:
print("Please enter a number greater than 0.")
continue
return nums_in_list
except ValueError:
print ("Please enter an integer.")
根据用户输入创建Fabonacci列表
def genterate_list(user_input):
fab_list = [0]
if user_input == 1:
return fab_list
elif user_input == 2:
fab_list.append(1)
return fab_list
else:
count = 1
while user_input > count:
if count == 2:
fab_list.append(1)
elif count > 2:
fab_list.append(fab_list[count - 2] + fab_list[count - 3])
count += 1
return fab_list
def loop_program():
while True:
opts = ['y', 'Y', 'N', 'n']
loop = input("Would you like to run the program again (y/n): ")
if loop not in opts:
print("Please select (y/n): ")
continue
elif loop == 'N' or loop == 'n':
return "N"
else:
return "Y"
主要部分:调用上面定义的功能显示输出。
if __name__ == '__main__':
while True:
original = genterate_list(get_user_input())
print("Original Fabonacci")
for x in original:
print(x)
cube_funtion = lambda value : value ** 3
cube_result = map(cube_funtion, original)
print("Cubed Values")
list(map(print, cube_result))
if loop_program() == "N":
break
我刚刚运行了它,并且在hackerank上成功运行了{cube = lambda x:x ** 3#完成了lambda函数
def fibonacci(n):
# return a list of fibonacci numbers
initiallist = []
for i in range(n):
if i < 2:
initiallist += [i]
else:
initiallist += [initiallist[-1] + initiallist[-2]]
return initiallist
if __name__ == '__main__':
n = int(input())
print(list(map(cube, fibonacci(n))))
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.