首页 > 编程知识 正文

python join(python中for循环流程图实例)

时间:2023-05-04 08:35:06 阅读:85712 作者:4166

你看过自己写的代码,看过满眼的for循环吗? 你发现你必须斜着眼睛,头向显示器前倾,才能看得更清楚。

总之我有过这样的经历。

for环路就像瑞士军刀,可以解决很多问题。 但是,如果踏实的乌龟需要对代码进行踢球,需要快速弄清楚代码在做什么,它们可能会不知所措。

map、filter、reduce三种技术可以提供函数的备选方案,说明迭代的原因,以避免过度的for循环。 以前在JavaScript上写过这些技术的入门文章,但是在Python上的实现有些不同。

下面简要介绍这三种技术,主要介绍JavaScript和Python语法的差异,并提供for循环转换方法的示例。

什么是地图、过滤器和重构?

回顾以前写的代码,我发现95%的时间都花在遍历字符串和数组上。 在这种情况下,将一组语句映射到每个值,筛选满足特定条件的值,或将数据集减少到一个聚合值。

有了这种洞察力,就可以识别和实现这三种方法。 也就是说,循环扫描通常属于这三个功能类别之一。

Map :对每个项目应用相同的步骤集,然后保存结果

Filter :应用验证条件,保存计算结果为True的项目

Reduce :返回从元素传递给元素的值

为什么Python Map/Filter/Reduce不同呢?

在Python中,这三种技术作为函数而不是数组和字符串类的方法存在。 也就是说,将编写map ) function,my_list,而不是my _ array.map (函数)。

此外,还需要向每个技术传递执行每个项目的函数。 此函数通常编写为匿名函数(在JavaScript中称为箭头函数)。 但是,在Python中,经常看到使用lambda式。

lambda表达式和arrow函数的语法实际上很相似。=替换为(,以便使用关键字lambda )。 剩下的差不多了。

//javascriptarrowfunctionconstsquare=编号=编号*编号;

//pythonlambdaexpressionsquare=lambda编号:编号*编号

行函数和lambda表达式之间的一个重要区别是,行函数可以在多个语句中扩展为完整的函数,而lambda表达式只限于返回的一个表达式。 因此,使用map、filter或reduce时,如果需要对各个项目执行多个操作,则必须在定义函数之后将其包含在内。

definefficientsquare (编号) :

结果=编号*编号

返回结果

地图(信息方形,我的列表) )。

替换for循环

是的,请给我下面的好东西。 以下是三个常见的for循环的示例,它们将被map、filter和reduce替换。 我们的编程目标:计算列表的奇数平方和。

首先,使用基本的for循环的例子。 注意:以下代码只是为了演示,没有map/filter/reduce也有改进的余地。

numbers=[ 1,2,3,4,5,6 ]

odd _编号=

四方形_奇数_编号=

总值=0

# #过滤器为奇数编号

编号:

if编号%2==1:

odd _ numbers.append (编号)

# #方形全部奇数号

for number in odd_numbers:

squared _ odd _ numbers.append (编号*编号) )。

# #计算总体

财富:

总数=编号

# #计算平均值

让我们将每一步转换为这三个函数中的一个。

从功能工具导入延迟

numbers=[ 1,2,3,4,5,6 ]

odd _ numbers=过滤器(lambdan : n %2==1,numbers ) ) ) ) ) )。) ) ) ) ) ) ) ) ) ) ) ) )。

四边形_奇数_编号=地图(拉丁美洲: n * n,奇数_编号) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。

total=Reduce(lambdaACC,n: acc n,四方形_奇数_编号) ) ) ) )。

必须强调几个重要的语法要点。

map和过滤器可以在本地使用。 但是,必须从Python 3或更高版本的包装器中导入reduce

lambda表达式是所有三个函数中的第一个参数,iterable是第二个参数

reduce的lambda表达式需要两个参数:累加器(传递给每个元素的值)和单个元素本身

请记住,for循环在代码中确实很重要,但扩展工具包绝非坏事。

via:https://媒体.com/better-programming/how-to-replace-your-python-for-loops-with-map-filter-and

雷锋网雷锋网雷锋网

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。