python - 使用函数制作“折叠列表”
问题描述
*这里的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 循环吗?还是其他类型的数学?
解决方案
函数是一种重用代码的方式。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)]
推荐阅读
- javascript - 如何根据 Angular 8 中的父选择显示结果
- html - 如何使用 Angular 7 在模态窗口中打开/显示来自后端的文本文件内容
- css - 如何在悬停和焦点上删除选择选项的蓝色背景
- c# - 如何使用正则表达式验证带空格的逗号分隔字符串
- javascript - 如何在 React 中使用 history.push 导航
- java - java 无需任何存储即可进行备份
- github - 如何安装从 github.com 克隆的 vim?
- highcharts - 将 Highchart 版本从 6.0.7 升级到 8.0.4 后,我面临图像剪切问题
- google-sheets - 如果它们在另一个单元格中具有相似的值,则连接单元格值
- vba - 如何退出使用函数的子?