问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

编程中编写循环的技巧?

发布网友 发布时间:2022-04-24 12:48

我来回答

2个回答

懂视网 时间:2022-05-10 08:33

要写好python的循环,就不用for语句!!!

首先,让我们退一步看看在写一个for循环背后的直觉是什么:

1.遍历一个序列提取出一些信息

2.从当前的序列中生成另外的序列

3.写for循环已经是我的第二天性了,因为我是一个程序员

幸运的是,Python里面已经有很棒的工具帮你达到这些目标!你需要做的只是转变思想,用不同的角度看问题。

不到处写for循环你将会获得什么

1.更少的代码行数

2.更好的代码阅读性

3.只将缩进用于管理代码文本

Let’s see the code skeleton below:

看看下面这段代码的构架:

# 1
with ...:
 for ...:
 if ...:
  try:
  except:
 else:

这个例子使用了多层嵌套的代码,这是非常难以阅读的。我在这段代码中发现它无差别使用缩进把管理逻辑(with, try-except)和业务逻辑(for, if)混在一起。如果你遵守只对管理逻辑使用缩进的规范,那么核心业务逻辑应该立刻脱离出来。

“扁平结构比嵌套结构更好” – 《Python之禅》

为了避免for循环,你可以使用这些工具

1. 列表解析/生成器表达式

看一个简单的例子,这个例子主要是根据一个已经存在的序列编译一个新序列:

result = []
for item in item_list:
 new_item = do_something_with(item)
 result.append(item)

如果你喜欢MapReduce,那你可以使用map,或者Python的列表解析:

result = [do_something_with(item) for item in item_list]

同样的,如果你只是想要获取一个迭代器,你可以使用语法几乎相通的生成器表达式。(你怎么能不爱上Python的一致性?)

result = (do_something_with(item) for item in item_list)

函数

站在更高阶、更函数化的变成方式考虑一下,如果你想映射一个序列到另一个序列,直接调用map函数。(也可用列表解析来替代。)

doubled_list = map(lambda x: x * 2, old_list)

如果你想使一个序列减少到一个元素,使用reduce

from functools import reduce
summation = reduce(lambda x, y: x + y, numbers)

另外,Python中大量的内嵌功能可会消耗迭代器:

>>> a = list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> all(a)
False
>>> any(a)
True
>>> max(a)
9
>>> min(a)
0
>>> list(filter(bool, a))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> set(a)
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> dict(zip(a,a))
{0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}
>>> sorted(a, reverse=True)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> str(a)
'[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]'
>>> sum(a)
45

热心网友 时间:2022-05-10 05:41

以python为例谈谈编写循环的技巧,for循环包含了常见的计数器式循环。由于通常for循环比while循环更容易写,也执行得更快,所以for循环一般是你遍历序列或其他可迭代对象时的首选。事实上,作为一条通用法则,你应该克制在Python中使用计数方式的*——Python提供的迭代工具,能帮你把像C这样低级语言中循环集合体的工作自动化。
不过,有些情况下你还是需要以更为特定的方式进行迭代。例如,如果你需要在列表中每隔一个元素或每隔两个元素进行访问,或是要同时修改列表呢?如果在同一个for循环内,并行遍历一个以上的序列呢?如果你也需要进行索引呢?
你总是可以用while循环和手动索引运算来编写这些独特的循环,但是python提供了一套内置函数,可以帮你在for循环内定制迭代:
·内置函数range (Python 0.X及之后版本可用)返回一系列连续增加的整数,可作为
for中的索引。
内置函数zip (Python 2.0及之后版本可用)返回一系列并行元素的元组,可用于在for中内遍历多个序列。
内置函数enumerate (Python 2.3及之后版本可用)同时生成可迭代对象中元素的值和索引,因而我们不必再手动计数。
内置函数map (Python 1.0及之后版本可用)在Python 2.X中与zip有着相似的效果,但是在3.X中 map 的这一角色被移除了。
因为for循环可能会比基于while的计数器循环运行得更快,所以借助这些工具并尽可能地使用for循环,会让你受益匪浅。让我们在常见的使用场景下,依次看一看这些内置函数吧。我们将会看到,它们的用法在Python 2.X和3.X中稍有不同,同时它们中的一些要比其他的更加有效。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
卡耐基的智慧大全集内容简介 会说话赢天下内容简介 卡耐基演讲与口才内容简介 商务口才训练内容简介 卡耐基金牌口才作者简介 卡耐基商务口才 作者简介 爱因斯坦的更多故事 杨柯叶谨言是什么电视 房贷和消费贷利率差别不大,但是还款金额差别挺大,都是怎么计算的... ...11月18号提现1500元、,11月25号还款1515,请问我还需要还 odm oem的区别 为什么很多公司都要注册家族公司吗? 家族公司注册孩子需要几岁 如何注册家族控股有限公司条件? 和孩子一起注册家族公司条件 注册家族公司违法嘛 如何申请家族公司 家族企业怎么注册 iqoopro可以使用22w的充电器吗,对手机有没有损害? 朝阳网债通不协商有后果么 朝阳商网怎么样 怎样进辽宁省朝阳市民心网进行投诉 2019年什么行业才算是朝阳行业,实体还是互联网? 朝阳兼职网 骗子 互联网依旧是朝阳行业,已经成为社会连接的基础模块。对吗? 朝阳信息网的CEO 朝阳装修网哪家好?厨房吊顶选择 北京朝阳区要做网站推广,找哪家好呀? 朋友推荐的东莞朝阳网络公司做网站,这家公司规模和服务怎么样,做企业官网靠谱吗 朝阳网的网站服务 怎么编程序? 编写程序很难吗? 编程怎么编出一个程序,怎么写代码? 怎么研发一款编程语言? wps表格怎么显示负数 微信怎么发电子档? 国画笔法有几种 中国画中的笔法 中国水墨画的笔法是什么? 国画山水画的笔法有几种 中国画在技法上大致分为哪几种? 中国画从技法分类,分为那几个 国画技法有哪些? 传统中国画的基本技法是? 中国画按画法分为哪两类 ? 国画用笔技法有哪些 中国画按技法分为哪些? 中国画的技法有哪些? 什么是个人所得税?通俗点 个人所得税税率是多少怎么算的