地图和lambda函数

时间:2017-01-21 22:51:04

标签: python

我目前正在做一个黑客问题。

目标是找到第一个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)))

问题是我的代码在测试用例中失败了,因为它返回了一个map对象而不是一个列表。我怎样才能确保它返回一个列表呢?

5 个答案:

答案 0 :(得分:4)

只需添加list()

即可
if __name__ == '__main__':
    n = int(input())
    print(list(map(cube, fibonacci(n))))

我取消了我的评论,因为这是地图对象的解决方案,我不认为你可以在实际调用之前修改它。正如Ewoud所说,map函数在python3和python2中的作用不同。

答案 1 :(得分:2)

你可以在它周围放置列表(...),所以

print(list(map(cube, fibonacci(n))))

(我还没有测试过剩下的代码)

编辑:如果您不想更改主要功能,您必须更改打印或地图功能或使用python 2。

答案 2 :(得分:1)

如果您无法编辑功能,请使用Python2.X而不是Python3.x.在Python3.x中,map()函数返回迭代器。

此处[链接] https://docs.python.org/3/library/functions.html#map

答案 3 :(得分:0)

这应该比你需要的更多。为了以防万一,我添加了一些额外的位,如循环和输入验证。希望这有帮助

通用公式 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

答案 4 :(得分:0)

我刚刚运行了它,并且在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))))

}