Python学习笔记(六)

Python学习笔记(六)

流程控制及相关函数

  • Python学习笔记(六)
  • 一. range() 函数
  • 二. 列表推导式
    • for表达式
  • 三. 内置函数
    • zip函数
    • reversed函数
    • sorted函数
  • 四.break和continue用法
    • break
    • continue

一. range() 函数

range(stop)
range(start, stop[, step])

start: 计数从 start 开始。默认是从 0 开始
stop: 计数到 stop 结束,不包括 stop
step:步长,默认为1

range() 函数的返回值类型为 range,而不是 list
要得到用 range() 函数创建的数字列表,需要list() 函数
list(range(1,6))

使用 range() 函数时,可以指定步长,即便 range() 第二个参数恰好符合条件,最终创建的数字列表中也不会包含它
range(2,11,2) # 1~10 内的偶数
range() 函数常常和循环结构、推导式一起使用,几乎能够创建任何需要的数字列表

二. 列表推导式

列表推导式利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的列表

for表达式

语法格式:
[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]
[if 条件表达式] 不是必须的

表达式就是 for 循环中的循环体:

for 迭代变量 in 可迭代对象
    表达式
    
列表推导式最终会将循环过程中计算表达式得到的值组成一个列表
>>>a_range = range(10)
>>>a_list = [x * x for x in a_range] # 对a_range执行for表达式
>>>print(a_list) 
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>>a_range = range(10)
>>>a_list = [x * x for x in a_range if x % 2 == 0] #增加if判断,推导式只处理 range 区间的偶数
>>>print(a_list)
[0, 4, 16, 36, 64]
>>>a_list = [(x, y) for x in range(3) for y in range(3)] #列表推导式的多循环
>>>print(a_list)
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

上述for表达式相当于for循环嵌套:

a_list = []
for x in range(3):
    for y in range(3):
        a_list.append((x, y))
包含多个循环的 for 表达式,同样可指定 if 条件

三. 内置函数

zip函数

将多个序列(列表、元组、字典、集合、字符串以及 range() 区间构成的列表)变成一个 zip 对象

将这些序列中对应位置的元素重新组合,生成新的元组

zip(iterable, ...)
iterable,... 表示多个列表、元组、字典、集合、字符串,range() 区间
>>>a_list = [1,2,3]
>>>a_tuple = (4,5,6)
>>>print([x for x in zip(a_list,a_tuple)])
[(1, 4), (2, 5), (3, 6)]
>>>a_dict = {
     2:2,3:3,4:4}
>>>b_dict = {
     5:5,6:6,7:7,8:8}
>>>print([x for x in zip(a_dict,b_dict)])
[(2, 8), (3, 5), (4, 6)]
使用zip()函数时,会分别取各序列中第1个元素、第2个元素到第n个元素,各自组成新的元组,字典取key

当多个序列中元素个数不一致时,会以最短的序列为准进行压缩
zip()函数返回的 zip 对象可以通过调用list()函数将zip()对象转换成列表

>>>print(type(zip(a_list,a_tuple)))
<class 'zip'>

>>>print(type(list(zip(a_list,a_tuple))))
<class 'list'>

reversed函数

对于给定的序列(包括列表、元组、字符串以及 range() 区间)返回逆序序列的迭代器,用于遍历该逆序序列

reversed(seq)
seq 可以是列表,元素,字符串以及 range() 生成的区间列表

使用 reversed() 函数进行逆序操作,并不会修改原来序列中元素的顺序

>>>print([x for x in reversed([1,2,3,4,5])]) #将列表进行逆序
[5, 4, 3, 2, 1]
使用list()函数,将 reversed() 函数逆序返回的迭代器,直接转换成列表
>>>print(type(list(reversed([1,2,3,4,5]))))
<class 'list'>

>>>print(type(reversed([1,2,3,4,5])))
<class 'list_reverseiterator'>

sorted函数

对序列(列表、元组、字典、集合、还包括字符串)进行排序

list = sorted(iterable, key=None, reverse=False)  

iterable 表示指定的序列
key 自定义排序规则
reverse 指定升序(False,默认)降序(True)进行排序

key 参数和 reverse 参数是可选参数

sorted()函数对序列进行排序,不会修改原来序列中元素的顺序,而是重新生成一个列表
>>>a_list = [1,2,3,4,5,6]
>>>print(sorted(a_list))
[1, 2, 3, 4, 5, 6]

>>>a_dict = {
     1:5,2:4,3:3,4:2,5:1}
>>>print(sorted(a_dict.items())) #字典默认按照key进行排序
[(1, 5), (2, 4), (3, 3), (4, 2), (5, 1)]

dict.items()函数以列表返回可遍历的(key, valu) 元组数组
默认对序列中元素进行升序排序,可手动将reverse参数值改为True,实现降序排序

sorted(a_list,reverse=True)

调用sorted()函数时,可加入key参数来接受一个函数,指定 sorted() 函数按照什么标准进行排序

sorted(a_list,key=lambda x:len(x)) ##使用lambda表示式自定义按照字符串长度排序

lambda表达式(匿名函数),常用来表示内部仅包含 1 行表达式的函数

四.break和continue用法

在执行 while 循环或者 for 循环时,如果希望在循环结束前就强制结束循环,可以使用Python提供的强制离开当前循环体的办法:breakcontinue

break

break 语句
完全终止当前循环,跳出当前所在的循环结构
break语句一般结合if语句进行搭配使用,表示在某种条件下跳出循环体

name = "youchanwill"
for i in name:
    if i == 'y' :
        break      #终止循环
    print(i,end="")
else:
    print("执行else语句")
print("跳出循环体")

使用 break 跳出当前循环体之后,该循环后的 else 代码块也不会被执行
对于嵌套循环结构,break语句只会终止所在循环体的执行,而不会作用于所有的循环体

name = "youchanwill"
for i in range(3):
    for j in name:
        if j == 'y':
            break   
        print(j,end="")
    print("跳出内循环")
跳出内循环
跳出内循环
跳出内循环

每当执行内层循环时,只要循环至执行 break 语句,会立即停止执行当前所在的内存循环体,继续执行外层循环
在嵌套循环结构中使用break同时跳出内层循环和外层循环(支持跳出多层嵌套循环)

name = "youchanwill"
flag = False  #定义一个bool变量
for i in range(3):
    for j in name:
        if j == 'y':
            flag = True  #在break前,修改bool变量
            break   
        print(j,end="")
    print("\n跳出内循环")
    if flag == True:
        print("跳出外层循环")
        break    #在外层循环体中使用 break
跳出内循环
跳出外层循环

通过bool类型的变量,在跳出内循环时更改值,在外层循环体中,判断值是否发生变化,如有变化,则再次执行 break 跳出外层循环

continue

continue 语句
跳过执行本次循环体中剩余的代码,转而执行下一次的循环
name = "youchanwill"
for i in range(3):
    for j in name:
        if j == 'y':
        	print('')
            continue   
        print(j,end="")
ouchanwill
ouchanwill
ouchanwill

continue语句和break语句一样,只需在whilefor语句中的相应位置加入

你可能感兴趣的:(Python,Note,python)