Python基础 | 关于“循环”那些事

转载 dataxon 2020/3/25 12:12:10

y中常见的循环有两类:循环是最常见的可迭代对象,其他可迭代的对象例如等输出:输出:,实际得到的序列是输出:输出:

Python中常见的循环有两类

  • for
  • while

for 循环

list

list是最常见的可迭代对象,其他可迭代的对象例如 dict,set,file lines,string

for i in set((1,2,3)):
    print(i)

输出:
1
2
3

import string
list_num = list(string.digits)
for i in list_num:
# 输出偶数
if int(i)%2 == 0:
print(i)

输出:
0
2
4
6
8

range

range 有头无尾,e.g. range(1,3) 实际得到的序列是(1,2)

for i in range(3):
    print(i)

输出:
0
1
2

for i in range(1,9):
    # 输出偶数
    if int(i)%2 == 0:
        print(i)

输出:
2
4
6
8

enumerate

enumerate为循环的list加上index,这个index是编号是从0开始的

list_val = [1,2,3,5,8]
for idx,val in enumerate(list_val):
    print(idx,val)

输出:
0 1
1 2
2 3
3 5
4 8

zip

同时遍历两个以上的list,并按顺序打包

list_1 = string.digits[:3]
list_2 = string.ascii_lowercase[:3]
list_3 = string.ascii_uppercase[:3]
print(list_1,list_2,list_3)

输出:
012 abc ABC

list_merge_1 = list(zip(list_1,list_2,list_3))
print(list_merge_1)
list_merge_2 = [i+j+k for (i,j,k) in zip(list_1,list_2,list_3)]
print(list_merge_2)

输出:
[('0', 'a', 'A'), ('1', 'b', 'B'), ('2', 'c', 'C')]
['0aA', '1bB', '2cC']

# 元素组合
list_merge_3 = [i+j for i in list('123') for j in list('ABC')]
print(list_merge_3)

输出:
['1A', '1B', '1C', '2A', '2B', '2C', '3A', '3B', '3C']

while 循环

while相当于for和if的结合体。

while不一定执行的是循环,有时候功能和if差不多,这个时候while的意义相当于如果条件为真,那就执行如下操作

while更多扮演for和if联合的角色,相当于重复执行如下操作,知道判断条件(会不断变化)不再成立为止

for和while的区别

  • for循环中迭代的条件是遍历一个序列,这个序列是有限或者确定的。
  • while循环则是基于条件判断,而没有明确的迭代序列,所以while循环可以用来探索序列(先试着执行,有问题咱就退出),比如爬虫的时候你不知道网页page_index到哪结束;
  • for循环不会“重复”执行完全一样的操作,除非迭代的list对象是一样的,而while是可以重复执行相同操作的,这种特定在需要“重试”的场景中会经常用到。e.g.网页返回失败的时候可以重试几次,登陆失败的时候可以重试几次。

while相当于if时

# 需要break的配合
x = 2
while(x>1):
print('这个值大于1')
break</code></pre>

输出:

这个值大于1
while充当for和if的混合体
# 需要自增的index来配合
idx = 1
while(idx < 5):
print(idx)
idx += 1</code></pre>

输出:







泛循环
如果将循环理解为按照顺序遍历一个序列。

除了用for、while还可以用其他函数达到“遍历”的效果。
列表解析
本质还是循环,常见的for循环在语句上的表现是多行,而列表解析是一行
# 筛选奇数
num_odd = [i for i in range(1,10) if i%2==1]
print(num_odd)
输出:

[1, 3, 5, 7, 9]
map
对序列中多个对象执行相同操作
list(map(lambda x:x**2,range(4)))
输出:

[0, 1, 4, 9]
list_words = ['life','is','short','use','python']
list(map(lambda x:len(x),list_words))
输出:

[4, 2, 5, 3, 6]
迭代器
变种的for循环
按顺序将序列值一次“弹出”,同时被”弹出“的值移出序列
序列为空时,报错StopIteration
vals_iter = iter(list(range(3)))
next(vals_iter)
输出:

迭代器可以如上述举例一样是”有穷“的迭代,也可以是”无穷“的,比如自增序列(index为自然顺序)
# 定义一个迭代器
class test_iter:
    def __init__(self):
        self.a = 1
        self.b = 1
def __iter__(self):
    return self

def __next__(self):
    x = self.a
    self.a, self.b = self.b, self.a+self.b
    return x</code></pre>

fb = test_iter()

for i in range(6):
    print(next(fb))
输出:











生成器
生成器和迭代器的对比
相同点:

从执行的结果看都是基于一定的规则”迭代“产生序列(无论是“无穷”系列还是“有穷”系列)
都支持iter,next方法
“弹出”数值后,会清除已“弹出”的数值

不同点:

生成器属于迭代器中的一种
在定义的时候,定义生成器就和定义函数一样自然(同时会自动产生iter和next方法),而定义迭代器则主要通过iter,next来定义序列;
更多参考1
更多参考2

def num_even(x):
    while(x>0):
        if x%2 == 0:
            yield x
        x -= 1
x = num_even(9)
for i in x:
print(i)
输出:







循环的跳出和继续
break 是跳出循环,也就是不再执行该循环的操作,如果是嵌套循环,那么上层的循环也终止
continue 跳过当前的操作,进入下一轮循环,对上层的循环没有影响
pass 接着执行,用得很少,此处不讲
break,continue之后的语句也不会执行,所以一定要注意这两个关键字放置的位置
单层循环
for i in range(5):
    print(i)
if i == 2:
    break # 当i=2时,循环结束
    print(&#39;不会出现&#39;)   </code></pre>

输出:





for i in range(5):
if i == 2:
    continue # 跳过2这个值
    print(&#39;不会出现&#39;)   
print(i)</code></pre>

输出:







i = 1
while(i<5):
    print(i)
    break # 执行一次就结束
    print('不会出现')   
输出:

i = 1
while(i<5):
    print(i)
i += 1
if i == 2:
    continue
    print(&#39;不会出现&#39;)   
</code></pre>

输出:







while中用continue要小心啊,比如如下代码是会一直执行的
i = 1
while(i<5):
    print(i)
if i == 2:
    continue
    print(&#39;不会出现&#39;) 
    
i += 1</code></pre>

嵌套循环
for i in range(3):
    for j in list('abc'):
        if j == 'b':
            break # 到b的时候就停止了
        print(i,j)
输出:
a
a
a
for i in range(3):
    for j in list('abc'):
        if i == 1 or j=='b':
            continue
        print(i,j) #不会出现带1和b的输出值
输出:
a
c
a
c
随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[Python基础 | 关于“循环”那些事]http://www.zyiz.net/tech/detail-121418.html

上一篇:小白学 Python 数据分析(20):pyecharts 概述

下一篇:小白学 Python 数据分析(20):pyecharts 概述

赞(0)

共有 条评论 网友评论

验证码: 看不清楚?
    扫一扫关注最新编程教程