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

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

off999 2024-10-23 12:50 35 浏览 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学习与发展的干货

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

相关推荐

主题软件免费(主题软件免费推荐)

下载主题方法:一、打开手机找到APPStore应用软件,二、点击进去在下面找到有个搜索,点击它查找主题壁纸,三、弹出来很多主题壁纸,根据下载量和个人喜欢的应用主题选择下载相应的主题,四、下载成功后即...

一芯fc1178bc盘量产教程(一芯量产工具使用教程)

fc1178bc量产工具没有显示u盘拔下U盘,关闭量产工具,再插上U盘(先要确认卸载了安国的驱动,如果不能确认,运行LoadDriver.exe卸载),然后插上U盘,右键我的电脑---属性---硬件-...

电脑怎么样还原原来的系统(电脑怎么还原之前的系统版本)
  • 电脑怎么样还原原来的系统(电脑怎么还原之前的系统版本)
  • 电脑怎么样还原原来的系统(电脑怎么还原之前的系统版本)
  • 电脑怎么样还原原来的系统(电脑怎么还原之前的系统版本)
  • 电脑怎么样还原原来的系统(电脑怎么还原之前的系统版本)
u盘内文件损坏怎么办(u盘内文件损坏怎么办解决)

以下是8种修复U盘文件损坏的方法:1.风险自担型:试图直接复制文件如果U盘的部分文件损坏,您可能可以使用此方法。请复制文件您能打开的所有文件,并尝试将它们粘贴到桌面或其他文件夹中。但是请...

internet explorer怎么更新(22号天蝎座的运势)

1、打开IE浏览器。2、点击位于浏览器窗口的右上角的功能按钮。3、点击关于InternetExplorer。它位于下拉菜单的底部。4、勾选“自动安装新版本”复选框。它位于“关于Internet...

snapseed(snapseed手机修图软件免费版)

Snapseed是一款非常流行的手机修图工具,下面是Snapseed工具最全教程:1.打开照片:打开Snapseed,点击左上角的“打开”按钮,选择需要修图的照片。2.自动增强:点击屏幕左下角的“...

canon佳能打印机驱动下载(下载佳能打印机驱动程序)

打开开始菜单,选择运行。输入gpedit.msc,并确定。选择左边“windows设置”,右边鼠标左键双击“安全设置”。选择策略在选择安全选项再鼠标左键双击“设备:防止用户安装打印机驱动程序”。选择已...

爱思助手安卓版下载(爱思助手安卓版下载v1.21.03)

容易造成系统的崩溃在爱思助手中安装的软件都打不开或者发生闪退,很容易造成系统的崩溃需要重新刷机,所以一般不太推荐使用爱思助手。爱思助手上下载正版软件不需要AppleID,这是为了方便不会注册的用户,但...

微软拼音输入法app(微软拼音输入法App下载)
微软拼音输入法app(微软拼音输入法App下载)

1、选择微软拼音输入法的图标,点击鼠标右键,出现菜单后选择设置选项。2、在高级里把美式键盘改为微软拼音输入法,然后点击右下角的属性按钮。3、点击逐键提示选项后,选择确定按钮,在后面出现对话框中点击应用即可。微软拼音输入法是一种基于语句的智能...

2025-12-31 04:51 off999

win10怎么更新蓝牙驱动(win10 更新蓝牙驱动)

1.电脑桌面,右键【此电脑】,点击【属性】。2.然后点击【设备管理器】。3.然后展开【蓝牙】。4.然后鼠标右键【Bluetooth】,点击【更新驱动程序(P)】。5.选择一种方式更新驱动,更新完驱动就...

360免费升级正版win10(360 win10免费升级)

  XP无法直接升级到Windows10.  能否升级还需要看硬件配置是否达标。如果达标可以通过以下方法来安装。  1、去系统网站下载win10镜像文件。  2、使用软碟通软件把镜像文件里面的gho....

w7正版系统多少钱一年(正版win7旗舰版系统多少钱)

所有的正版windows系统都是需要付费购买的,包括笔记本电脑中预装好的正版系统,相应的费用也算入购机款中。你问的外行了。1、OEM系统是正版的,但是只能用于本品牌机上,也就是联想的WIN7系统(即O...

excel2007破解版下载电脑版(excel 破解版)

现在excel2007可以说是免费软件,也可以说不是,因为现在在网上下载不了免费的2007年版excel软件,只能下载破译版的或用电信交钱下载。但有些电脑重装系统会带有2007年版的excel,这就是...

comfast设置连接wifi(comfast路由器设置方法)

1,网关没有设置,2,DNS服务器没有设置,或者说设置成自动获取IP地址.具体不知道你是什么样的路由器,一般来说正常情况下网桥都是可以接收wifi信号的。所谓的网桥是使用有线网络连接到网桥设备上,然...

windows电脑管家(windows电脑管家有用吗)

可以按照以下的方法步骤解决:1,在电脑左下角的搜索框内输入“电脑管家”,即可在电脑中匹配到该程序2,右键点击该程序图标,选择“打开文件位置”3,点击“打开文件位置”即可打开该程序在电脑中的地址窗口,右...

取消回复欢迎 发表评论: