繁体   English   中英

映射和lambda函数

[英]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()函数返回迭代器。

这是[链接] https://docs.python.org/3/library/functions.html#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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM