问题的提出和解决方案概述
本文将向你展示如何在Python中对List应用一个函数。
为了使它更有趣,我们有以下运行场景。
作为一项 Python 任务,我们给了你一个 的整数列表,并要求你以各种方式对每个列表元素应用一个函数。
问题是:我们如何在 Python 中编写代码将一个函数应用到List 上?
我们可以通过以下方法之一来完成这项任务。
准备工作
这些例子使用了来自 math库中的函数。
在每个脚本的顶部添加以下代码。这段代码将使本文中的代码能够无误地运行。
import math
方法1:使用生成器表达式
这个例子使用了一个生成器表达式。这个表达式首先在内存中执行任何操作,然后返回一个可迭代对象。这是一个有效的选择,因为在完成后,内存被清空,变量被擦除。
nums = [18, 43, 54, 65, 31, 21, 27]
nums = (math.pow(num,2) for num in nums)
print(nums)
上面的代码声明了一个整数的列表,并将其保存到变量nums 。
接下来,一个生成器表达式被调用,并应用了 math.pow()函数从 Python 的内置 math库中的函数到每个列表元素。结果保存到nums 。
如果这时输出到终端,会显示一个类似于下面的可迭代的生成器对象。
<generator object at 0x000002468D9B59A0> |
要把生成器对象变成一个[List](https://blog.finxter.com/python-lists/),运行下面的代码。
print(list(nums))
nums 的内容如下。
| [324.0, 1849.0, 2916.0, 4225.0, 961.0, 441.0, 729.0] |
注意:该 math.pow()函数接受两(2)个整数作为参数。 x (值)和y (幂),并返回x 的值,将其提升到y 的幂。
方法2:使用列表理解法
这个例子使用List Comprehension来对每个List元素进行操作。
nums = [18, 43, 54, 65, 31, 21, 27]
nums = [math.sqrt(num) for num in nums]
print(nums)
上面的代码声明了一个整数的列表,并将其保存到变量nums 。
接下来,调用List Comprehension并应用 math.sqrt()函数,并将 Python 内置的 math库中的函数到每个List元素。结果保存到nums 。
如果输出到终端,显示如下。
[4.242640687119285, 6.557438524302, 7.3484692283495345, 8.06225774829855, 5.5677643628300215, 4.58257569495584, 5.196152422706632] |
注意:该 math.sqrt()函数接受一个整数作为参数,并返回该参数的平方根。
方法3:使用Lambda和map()
这个例子使用 Python 的 lambda函数与 map()和List来对每个List元素进行数学运算。
nums = [18, 43, 54, 65, 31, 21, 27]
nums = list(map(lambda x: math.degrees(x), nums))
print(nums)
上面的代码声明了一个的数字列表,并将其保存到变量nums 。
接下来,List被调用并传递一个参数 map()的参数,而后者又传递给 lambda函数来应用 math.degrees()函数从 Python 的内置 math库中的函数应用到每个[L](https://blog.finxter.com/python-lists/)i[st](https://blog.finxter.com/python-lists/)元素。结果返回到nums 。
如果输出到终端,显示如下。
[1031.324031235482, 2463.71851906254, 3093.9720937064453, 3724.225668350351, 1776.169164905552, 1203.2113697747288, 1546.9860468532227] |

Note:该 math.degrees()函数接受一个角度作为参数,将这个参数从弧度转换为度,并返回结果。
方法4:使用For Loop
这个例子使用一个 for循环来对每个List元素应用数学运算。
nums = [18, 43, 54, 65, 31, 21, 27]
i = 0
while i < len(nums):
nums[i] = round(math.sqrt(nums[i]), 2)
i += 1
print(nums)
上面的代码声明了一个整数的列表,并将其保存到变量nums 。然后,声明一个计数器变量,i ,设置为0。
接下来,一个 while循环被实例化并迭代每个List元素,应用 math.sqrt()函数,并将小数点后的位置限制在两(2)位。结果保存在nums 中的相应元素。
迭代完成后,输出被发送到终端。
[4.24, 6.56, 7.35, 8.06, 5.57, 4.58, 5.2] |
奖金:计算每个列表元素的佣金
这个奖励代码从一个文件中提取了两(2)列 real-estate.csv文件中提取两(2)列,即街道和价格列,并将每一列转换为一个列表。
然后,街道栏被从大写字母转换为标题大小写。 uppercase()转换为标题大小写,方法是应用title()函数。接下来,销售佣金被计算并应用于每个价格元素,使用 round().
import pandas as pd
df = pd.read_csv('real-estate.csv', usecols=['street', 'price']).head(5)
street = list(df['street'])
street = [item.title() for item in street]
prices = list(df['price'])
commis = [round(p*.06,2) for p in prices]
print(street)
print(prices)
输出结果如下。
['3526 High St', '51 Omaha Ct', '2796 Branch St', '2805 Janette Way', '6001 Mcmahon Dr'] |
摘要
这篇文章提供了(4)种方法,将一个函数应用于每个 List元素,以选择最适合你的编码要求。
祝您好运,编码愉快!