百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

5个小技巧让你重新认识Python循环迭代,让for循环告别繁复

off999 2024-10-23 12:50 41 浏览 0 评论

全文共1898字,预计学习时长10分钟



或许每个初学Python的程序员最早接触的概念中都有For循环,这一点理所当然, for循环可以在不费吹灰之力的情况下对数据执行很多操作。


然而,大量的使用for循环也可能会让使用者的思维拘泥于简单的迭代中,而忽略了一些更加高效且简洁的迭代方法。


如何让你的for循环告别繁复拥抱简洁,如何重启探索Python循环迭代的大门,希望以下几个小技巧能够给你启发。


Zip:同时在两个列表中循环



笔者在实践中发现代码可以同时在两个数组中进行循环。要想在其他的编程语言中做到这一点相对来说难度大很多,这也体现出了Python的简易性。要达到同时在两个数组中进行循环这一目的,只需使用zip()函数。


for first,second in zip(array1,array2):
    print(first)
    print(second)


在一个偶整数序列和一个奇整数序列中使用这一方法就能体现出这一函数的功效。


odds = [1,3,5,7,9]
evens = [2,4,6,8,10]
for oddnum, evennum in zip(odds,evens):
    print(oddnum)
    print(evennum)


以上函数输出的结果便是:

1
2
3
4
5
6
7
8
9
10

In Range函数:编写C-Style循环


C-Style似乎看起来有点儿平凡,但它能在循环中焕发光彩。


for i in range(10):
    print(i)
    if i == 3:
        i.update(7)


C语言爱好者可能觉得以上的代码并不是C-Style循环,但如果不想自己动手编写迭代函数,以上内容已经是最完美的形式了。



不过笔者热衷于“浪费时间”,因此决定编写一个新的迭代程序来写出尽可能完美的C-Style循环。


class forrange:

    def __init__(self, startOrStop,stop=None, step=1):
        if step == 0:
            raise ValueError('forrangestep argument must not be zero')
        if not isinstance(startOrStop,int):
            raise TypeError('forrangestartOrStop argument must be an int')
        if stop is not None and notisinstance(stop, int):
            raise TypeError('forrangestop argument must be an int')

        if stop is None:
            self.start = 0
            self.stop = startOrStop
            self.step = step
        else:
            self.start = startOrStop
            self.stop = stop
            self.step = step

    def __iter__(self):
        returnself.foriterator(self.start, self.stop, self.step)

    class foriterator:

        def __init__(self, start, stop,step):
            self.currentValue = None
            self.nextValue = start
            self.stop = stop
            self.step = step

        def __iter__(self): return self

        def next(self):
            if self.step > 0 andself.nextValue >= self.stop:
                raise StopIteration
            if self.step < 0 andself.nextValue <= self.stop:
                raise StopIteration
            self.currentValue =forrange.forvalue(self.nextValue, self)
            self.nextValue += self.step
            return self.currentValue

    class forvalue(int):
        def __new__(cls, value,iterator):
            value =super(forrange.forvalue, cls).__new__(cls, value)
            value.iterator = iterator
            return value

        def update(self, value):
            if not isinstance(self, int):
                raiseTypeError('forvalue.update value must be an int')
            if self ==self.iterator.currentValue:
                self.iterator.nextValue =value + self.iterator.step

Filter()函数:只对需要的数据进行循环


在处理大量的数据时,使用filter函数能够使得数据在使用时效果更佳。Filter函数正如其名,其功效是在对数据进行迭代前进行过滤。当只需要使用某一范围内的数据而且不想再添加一个条件时,filter十分实用。


people = [{"name": "John","id": 1}, {"name": "Mike", "id": 4},{"name": "Sandra", "id": 2}, {"name":"Jennifer", "id": 3}]for person in filter(lambda i:i["id"] % 2 == 0, people):
...     print(person)
...
{'name': 'Mike', 'id': 4}
{'name': 'Sandra', 'id': 2}


Enumerate()函数:对维度进行索引


在Python中使用枚举函数可以让Python将从数组中输出的列表索引进行编号。笔者制作了一个包含三个元素的列表对这一功能进行展示:


l = [5,10,15]


现在可以利用以下方法来访问数组索引:


l[1]
10
l[0]
5
l[2]
15


在这些列表中进行枚举时,维度的索引位置和维度会结合产生一个新的变量。请注意这一新变量的类型。


Python会自动将这些索引置入一个元组之中,这一点十分奇怪。笔者还是倾向于从只有一个元素的Python库中获得这些结果。还好,我们可以把这些枚举函数置入到一个Python库中。


data = dict(enumerate(l))


输入以上代码之后就会得出:


>>> data
{0: 5, 1: 10, 2: 15}



Sorted()函数:使用数据中进行排序,而非使用前


Sort函数对于常常需要处理大量数据的人来说至关重要,它将字符串根据首字母A到B进行排列,将整数和倍数自负无穷起由小至大排列。需要注意的是,这一函数无法用于带有字符串和整数或浮点数的列表。


l = [15,6,1,8]
for i in sorted(l):
    print(i)
1
6
8
15


也可以将相反的参数设为False来进行逆运算。


for i in sorted(l,reverse = True):
    print(i)
15
8
6
1


对于可用的最后一个参数,可以使用key函数。Key是一个应用于已知循环中的每个维度的函数。而笔者偏向于使用lambda,Lambda会创造一个匿名但仍可调用的函数。


l.sort(key=lambda s: s[::-1])


写代码时,遇到大量的带有迭代的数据在所难免。简洁成就卓越,这些方法能够使代码简洁明了并且运行起来更快。循环的世界值得你继续探索!


留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: