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

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

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

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

相关推荐

笔记本电脑开机就蓝屏(笔记本电脑开机就蓝屏了)

USB:  假如计算机处于开机的状态时USB接口上有U盘等存储设备,那么计算机就很有可能出现蓝屏现象,而且无法正常开机。因此,当计算机在开机时出现蓝屏状态时,我们首先要检查一下USB接口是否有接入U...

重置无线路由器(重置无线路由器密码)

1、将网线—路由器—电脑之间的线路连接好,启动电脑和路由器设备;2、启动设备后,打开浏览器,在地址栏中输入192.168.1.1进入无线路由器设置界面。(如进不了请翻看路由器底部铭牌或者是路由器使用说...

电脑有网却打不开网页是怎么回事
  • 电脑有网却打不开网页是怎么回事
  • 电脑有网却打不开网页是怎么回事
  • 电脑有网却打不开网页是怎么回事
  • 电脑有网却打不开网页是怎么回事
win7系统整个界面变大(win7系统整个界面变大怎么办)

解决方法:1、首先查看当前系统的桌面图标情况,发现桌面图标突然变成了超大号的了。非常难看。2、右键点击桌面空白处,分别选择“查看”,“中等图标”。3、现在再查看桌面图标,发现已经恢复了。4、还有一种方...

电脑设置一切正常就是没声音

在电脑重置后没有声音的情况下,可能有以下几种可能的原因和解决方法:1.音频驱动程序问题:电脑重置后,可能需要重新安装或更新音频驱动程序。你可以尝试重新安装声卡驱动程序,可以从电脑或声卡制造商的官方网...

eset nod32官网(esetnod32官网)

从系统性能上来说,卡巴斯基对系统的影响略大于ESETNOD32。具体表现就是,系统反应有所变慢,硬盘读写变频繁。从防护角度上来说的话……卡巴斯基的防护组件很多(商业版,免费版不在考虑范围之内),全开...

如何安装ie浏览器(怎么安装ie浏览器 win10)

方法一:一般系统自带的IE不能卸载和自己安装,如果是系统自带的可以还原系统或重装,也可用软件覆盖安装IE试试。使用系统自带的系统还原的方法:系统自带的系统还原:“开始”/“程序”/“附件”/“系统工具...

一键恢复桌面图标win7(一键恢复桌面图标win10)

Win7桌面图标设置:  1.在桌面上点击鼠标右键点击(其中查看菜单的子项是用来修改桌面图标的大小,如需修改图标大小只需在此菜单设置即可),选择“个性化”。2.在个性化设置窗口,单击左侧的更改桌面图...

win7格式化电脑怎么弄

win7旧电脑想要格式化干净,具体方法如下:WIN7电脑利用鼠标点击我的电脑,找到C盘,鼠标右键选择格式化,这样就可以格式化,干干净净在Windows7中,您可以通过以下步骤来格式化计算机,而无需...

蓝牙适配器驱动安装教程(蓝牙适配器的驱动怎么安装)

1可以在官网或第三方软件平台下载相关驱动程序。2在安装驱动前,需要先确认你的蓝牙适配器的类型和型号,然后去对应的官网或者第三方软件平台下载最新的驱动。3安装驱动程序时需要注意,不能插拔蓝牙适配器...

手机上怎么设置wifi密码(手机上怎么设置wifi密码万能钥匙打不开)

已经安装和设置好的路由器,如果想用手机设置新的密码,可以按照下面的步骤进行操作:  1.首先,请确保你的手机连接到路由器的wifi网络,否则无法进行设置。  2.在路由器背面的铭牌中,查看路由器的登录...

qq密码安全中心官网(qq安全中心密码保护)
  • qq密码安全中心官网(qq安全中心密码保护)
  • qq密码安全中心官网(qq安全中心密码保护)
  • qq密码安全中心官网(qq安全中心密码保护)
  • qq密码安全中心官网(qq安全中心密码保护)
win7升win10会丢数据吗(win7升级win10会丢失数据吗)

你打开电脑那个控制面板,然后硬件硬盘管理。你看一下在那里应该是可以吧,d盘e盘f盘都拉出来的。只要您的那个硬盘没有坏。如果说这里面找不到的话你就拿到,那个,卖电脑那里重新装个系统就可以了。不会!安卓手...

win10系统在哪里(win10系统在哪里看显卡配置)

在Windows10系统中,您可以使用以下步骤查看所有程序:1.点击“开始”按钮。2.在“搜索”框中键入“程序”,然后按“搜索”。3.在搜索结果页面中,您可以使用分类浏览程序列表,也可以按...

win7内部版本7601怎么激活(win7内部版本7601激活必须今天激活)

没法激活,win7本身不具备激活7601的功能右击计算机--属性,拉倒最下面,会提示该系统未激活,然后点击激活,输入密钥就可以了,需要连接互联网。如果没有互联网,也可以电话激活。Windows7内部版...

取消回复欢迎 发表评论: