首页 > 解决方案 > 使用函数制作“折叠列表”

问题描述

*这里的python背景非常非常少——这是我为期5周的补习班的第一周。我需要创建一个函数,将列表作为输入并使列表“对折”,以便将第一项添加到最后一项,将第二项添加到倒数第二项,等等。

我能够编写一个代码来做到这一点 - 但后来意识到这不是我应该做的功能。

这是我制作的有效代码: a = [10, 14, 21, 25 ,52, 55] foldedlist=[ a[i] + a[-(i + 1) ] for i in range( len(a) // 2)] print('folded list:', foldedlist)

但我被模糊地告知我应该做一些更像这样的东西: def folded_list(input_list): <stuff here> return <whatever you call the folded list>

所以我尝试了下面的代码,但我得到的只是“<function folded_list at 0x7ff13cb174c0>”

a=(1, 3, 5, 7, 9, 11) def folded_list(a): (sum((a[i]) + (a[-(i + 1) ])) for i in range( len(a) // 2)) return(folded_list) print(folded_list)

我对在“这里的东西”行中放什么以及它是否需要周围的大于/小于符号感到困惑。我应该像以前的代码那样做一个 for 循环吗?还是其他类型的数学?

标签: pythonfunction

解决方案


函数是一种重用代码的方式。a因此,假设您现在拥有 10,000 个要折叠的列表,而不是仅列出您拥有的列表。如果没有函数,您将需要输入代码 10,000 次a,每次都更改为新列表。相反,函数的作用是允许您按需执行一组代码。现在,您无需输入 10,000 次代码,只需调用您的函数即可。

我们来看一个基本功能:

def foo(num):
    result = num * num
    return result

该函数接受一个输入参数num(放在函数声明的括号中)并返回该数字的平方。现在,如果您运行以下代码,您将了解函数为何有用:

def foo(num):
    result = num * num
    return result

print(foo(5)) #25
print(foo(11)) #121
print(foo(8)) #64

看?我们只需键入一次代码即可计算数字的平方!

现在让我们回到折叠列表。他们要求的是以下内容:

def folded_list(input_list):
    <stuff here>
    return <whatever you call the folded list>

<text>是书写“填空”或MadLibs 风格的常用方式。它只是一个占位符。所以你会想要这样的东西:

a = [10, 14, 21, 25, 52, 55]
b = [58, 46, 78, 12]
c = [11, 64, 62, 50, 44, 31, 77, 99]

def folded_list(input_list):
    a = input_list
    folded_list_output = [ a[i] + a[-(i + 1) ] for i in range( len(a) // 2)] #your code
    return folded_list_output

print('folded list a:', folded_list(a)) #folded list a: [65, 66, 46]
print('folded list b:', folded_list(b)) #folded list b: [70, 124]
print('folded list c:', folded_list(c)) #folded list c: [110, 141, 93, 94]

现在,您可以根据需要多次运行同一行代码!希望这现在更有意义:)

现在让我们看一下在不改变其功能的情况下缩短方法的两种可能方法。

在上面的例子中,我有a = input_list,但即使这样也不是非常必要的。您可以直接在 input_list 上执行操作,如下所示:

def folded_list(input_list):
    folded_list_output = [ input_list[i] + input_list[-(i + 1) ] for i in range( len(input_list) // 2)]
    return folded_list_output

通过直接返回您的计算可以进一步简化:

def folded_list(input_list):
    return [ input_list[i] + input_list[-(i + 1) ] for i in range( len(input_list) // 2)]

推荐阅读