查看原文
其他

给妹子讲python-S01E13循环迭代高级技巧

给妹子讲python Python爱好者社区 2019-04-07

作者:酱油哥/ 清华程序猿      
微信公众号: python数据科学家
知乎专栏: 《给妹子讲python》
https://zhuanlan.zhihu.com/c_147297848



前文传送门:

给妹子讲python-S01E01好用的列表

给妹子讲python-S01E02学会用字典

给妹子讲python-S01E03元组的使用

给妹子讲python-S01E04容器遍历和列表解析式

给妹子讲python-S01E05字符串的基本用法

给妹子讲python-S01E06字符串用法进阶

给妹子讲python-S01E07字符编码历史观:从ASCII到Unicode

给妹子讲python-S01E08理清python中的字符编码方法

给妹子讲python-S01E09文件操作小意思

给妹子讲python-S01E10动态类型与共享引用

给妹子讲python-S01E11赋值与对象拷贝

给妹子讲python-S01E12循环迭代初体验

【要点抢先看】

1.range函数:返回一系列连续增加的整数
2.zip函数:并行迭代多个序列
3.enumerate函数:同时产生偏移和元素

今天我们来讲讲三种循环迭代的常用技巧,range、zip和enumerate

内置函数range:用来返回一系列连续增加的整数

这个函数产生的连续增加的整数序列,可以作为for循环迭代的索引

for x in range(5):
    print(x, end=',')

0,1,2,3,4,

range也可以用在任何需要整数列表的地方。直接打印range函数的返回值是不能直接返回一个整数列表的,如果将其作为一个参数传给list函数,则可以一次性显示全部结果。

print(range(5))

range(0, 5)

-

print(list(range(-5,5)))

[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]

内置函数range在for循环中是最常用的,它提供了一种简单的方法,重复特定次数的动作。

当然还可以做一些定制工作,比如在遍历的过程中跳过一些元素。例如每隔一个元素对字符串进行遍历:

S = 'abcdefghijklmn'
for i in range(0,len(S),2):
    print(S[i], end=',')

a,c,e,g,i,k,m,

当然,这只是一个示例,我们之前提到过的分片表达式才是实现该功能的最简单的方法,这个我们之前是介绍过的:

S = 'abcdefghijklmn'
for c in S[::2]:
    print(c, end=',')

a,c,e,g,i,k,m,

和文件迭代一样,这里range函数的优点也是明显的,它没有复制字符串,不会在python中再创建一个字符串列表,这对于很大的字符串来说,会节约不少空间。

zip:用来并行迭代多个序列

内置zip函数允许我们使用for循环来并行迭代多个序列。zip使用多个序列作为参数,然后返回元组的列表,将这些序列中的并排元素一一配对。

L1 = [1,2,3,4,5]
L2 = ['A','B','C','D','E']
for t in zip(L1,L2):
    print(t, end=',')

(1, 'A'),(2, 'B'),(3, 'C'),(4, 'D'),(5, 'E'),

和range一样,zip在遍历时也是依次按需产生结果,而不是一次性显示所有结果

L1 = [1,2,3,4,5]
L2 = ['A','B','C','D','E']

print(zip(L1,L2))

<zip object at 0x000000000260ED08>

同样的,如果想一次性显示所有结果,则必须将其包含在一个list调用中,以便一次性显示所有结果

L1 = [1,2,3,4,5]
L2 = ['A','B','C','D','E']
print(list(zip(L1,L2)))

[(1, 'A'), (2, 'B'), (3, 'C'), (4, 'D'), (5, 'E')]

最后只说明一点,当zip的多个参数长度不同时,zip会以最短序列的长度为准来截断所得到的元组

L1 = [1,2,3,4,5]
L2 = ['A','B','C']
print(list(zip(L1,L2)))

[(1, 'A'), (2, 'B'), (3, 'C')]

回顾一下,之前我们谈到过,当字典的键和值必须在运行时计算产生时,zip函数可以用于产生这样的字典

keys = ['A', 'B', 'C']
vals = [1, 2, 3]
D = dict(zip(keys,vals))
print(D)

{'C': 3, 'A': 1, 'B': 2}

enumerate:用来同时产生偏移和元素

有时我们在遍历的时候,既需要偏移值,又需要对应元素,那么内置函数enumerate就可以实现这个功能。

他在for循环的条件下每轮迭代返回一个包含偏移值和偏移元素的元组:(index,value)

S = 'spam'
for t in enumerate(S):
    print(t,end=' ')

(0, 's') (1, 'p') (2, 'a') (3, 'm')

同样,他也是按需产生,而非一次性产生所有元素的列表

S = 'spam'
print(enumerate(S))

<enumerate object at 0x0000000001ED2558>

【妹子说】这种高级技巧课程的内容还是挺多的,需要多多练习才能好好掌握~

Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

小编的Python入门免费视频课程!!!

【最新免费微课】小编的Python快速上手matplotlib可视化库!!!

崔老师爬虫实战案例免费学习视频。

陈老师数据分析报告制作免费学习视频。

玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存