Python基础篇——Day5

for循环和可迭代对象遍历

for循环

for循环通常用于可迭代对象的遍历,语法:

for 变量 in 可迭代对象:
	循环语句

可迭代对象

Python包含以下几种可迭代对象:

  1. 序列。包含:字符串、列表、元组
  2. 字典
  3. 迭代器对象(iterator)
  4. 生成器函数(generator)
  5. 文件对象

操作示例:

'''
对字符串进行遍历
'''
for x in 'abcd':
	print(x)	
'''
结果为:
a
b
c
d
'''
'''
对字典进行遍历
'''
d={'a':100,'b':200}
for x in d:
	print(x)
'''
结果为:
a
b
默认将字典的键对象打印出来
'''
'''
对字典值键、值、键值对分别进行遍历
'''
#对键遍历
for x in d.keys():
	print(x)

#对值遍历
for x in d.values():
	print(x)

#对键值对遍历
for x in d.items():
	print(x)

range对象

range是一个迭代器对象,用来产生指定范围的数字序列,格式为:

range(start,end,step)
生成的序列从start开始到end结束,不包含end,若未填写start,则默认为0。步长step的默认值为1

操作示例:

'''
计算1-10的累加和,奇数累加和,偶数累加和
'''
sum_all=0
sum_odd=0
sum_even=0
for i in range(101):
	# 求总和
	sum_all=sum_all+i
	# 求偶数和
	if i%2==0:
		sum_even=sum_even+i
	# 求奇数和
	else:
		sum_odd=sum_odd+i

for循环嵌套

操作示例:

'''
打印5行5列表格,每行数字为(行号-1)
'''
for i in range(5):
	for j in range(5):
		print(i,end="\t")  # 不换行打印,打印5次
	print() # 表示换行
'''
结果为:
0	0	0	0	0	
1	1	1	1	1	
2	2	2	2	2	
3	3	3	3	3	
4	4	4	4	4
'''
'''
打印九九乘法表
'''
for i in range(1,10):
	for j in range(1,i+1):
		print("{0}*{1}={2}".format(i,j,i*j),end="\t")
	print()
'''
结果为:
1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81
'''

break和continue语句

break语句

break语句可用于while和for循环,用来结束整个循环,当有嵌套循环时,break语句仅仅跳出最近一层的循环
操作示例:

while True:
	num=int(input("enter an integer: "))
		if num==1:
			break
'''
上述例子中,若输入的整数为1,则跳出整个while循环
'''
for i in range(3):
	for j in range(4):
		if j==2:
			break
'''
上述例子中,若j取值为2,则跳出最近一层for循环,即for j in range(4),然后最外层循环开始新的一轮运行,
即,若跳出时的i为1,则开始新一轮循环时的i为2
'''

continue语句

continue语句用于结束本次循环,继续下一次循环,多个循环嵌套时,continue语句也是应用于最近一层的循环

操作示例:

for i in range(3):
	for j in range(4):
		if j==2:
			print("not ok")
			continue
		print("ok")
'''
上述例子中,若j取值为2,则当前最近一层的循环结束,马上开始下一次循环,即当j取值为2时,for j循环打印出
not ok后循环结束,将不会执行打印ok的操作,随后马上开始下一次循环,此时j为3
'''

else语句

Python的while,for循环可以附带一个else语句(作为可选项)。如果for,while语句没有被break语句结束,则会执行else语句,否则不执行。语法格式如下:

while 条件表达式:
	循环体
else:
	语句块

或者

for 变量 in 可迭代对象:
	循环体
else:
	语句块

操作示例;

'''
4名员工,录入这4人的薪资,全部录入后,将提示“您已完成录入操作”
'''
salarySum=0
salarys=[]
for i in range(4):
	s=float(input("enter the salary of an employee(enter Q or q to quit)"))
	if s.upper()=='Q':
		print("the work is done,thanks!")
		break
	if s<0:
		print("salary cannot be less than 0, please re-enter it")
		continue
	salarys.append(s)
	salarySum+=s
else:
	print("the work is done, thanks!")

print("the salaries for the 4 members are ",salarys)
print("the average salary is ",salarySum/4)

'''
上述例子中,若不输入Q或q,则输入完全部4名员工薪资后(for 循环结束后),程序将执行else语句块并打印出
the work is done, thanks!
'''

循环代码优化

原则

遵守以下三个原则可大大提高运行效率,避免不必要的低效计算:

  1. 尽量减少循环内部不必要的计算,能放到循环外面的尽量放到外面
  2. 嵌套循环中,尽量减少内层循环的计算,尽可能向外提
  3. 尽量使用局部变量,因为其查询较快

操作示例:

import time

start1=time.time()
for i in range(1000):
	result=[]
	for m in range(10000):
		result.append(i*1000+m*100)
end1=time.time()
print("耗时1:{0}".format(end1-start1))

start2=time.time()
for i in range(1000):
	result=[]
	c=i*1000
	for m in range(10000):
		result.append(c+m*100)
end2=time.time()
print("耗时2:{0}".format(end2-start2))

'''
上述例子中,第二个示例将i*1000的操作提到内层循环外进行,这样的操作可节约总计算时间,其结果为:
耗时1:2.3127858638763428
耗时2:2.106515884399414
'''

其它优化手段

  1. 连接多个字符串,使用join()方法而不是"+"
  2. 列表进行元素的插入和删除,尽量在列表尾部进行

推导式创建序列

列表推导式

基本语法:
[表达式 for item in 可迭代对象] 或者
[表达式 for item in 对迭代对象 if 条件判断]

操作示例:

[x for x in range(5)]
'''
结果为:[0, 1, 2, 3, 4]
'''
'''
也可以使用两个循环
'''
cells=[(row,col) for row in range(3) for col in range(3)]
'''
结果为:[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
'''

字典推导式

基本语法:
{key_expression: value_expression for 表达式 in 可迭代对象}

类似于列表推导式,字典推导式也可以用if条件判断,并用多个for循环嵌套

操作示例:

myText="i love u, i love python"
char_count={c:myText.count(c) for c in myText}
'''
结果为:
{'i': 2, ' ': 5, 'l': 2, 'o': 3, 'v': 2, 'e': 2, 'u': 1, ',': 1, 'p': 1, 'y': 1, 't': 1, 'h': 1, 'n': 1}

集合推导式

集合中所有元素都是字典的键对象,基本语法:
{表达式 for item in 可迭代对象} 或者
{表达式 for item in 可迭代对象 if 条件判断}

生成器推导式(生成元组)

返回的不是元组,而是一个生成器对象

操作示例:

(x for x in range(1,100) if x%9==0)
'''
会返回一个生成器对象,结果为:
<generator object <genexpr> at 0x000001F25015C570>
'''

由此可见,元组是没有推导式的
一个生成器只能运行一次,第一次迭代可以得到数据,第二次迭代就发现数据已经没有了
操作示例:

a=(x for x in range(1,100) if x%9==0)
b=list(a)
>>b
[9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99]
c=list(a)
>>c
[]

函数的定义和调用:

基本语法:

def 函数名([参数列表]):
‘’‘文档字符串’’’
函数体/若干语句

要点:

  1. Python执行 def 时,会创建一个函数对象,并将其地址赋予函数名变量
  2. 圆括号内是形式参数列表,有多个参数则使用逗号隔开
  3. 形式参数不需要声明类型,也不需要指定函数返回值类型
  4. 无参数,也必须保留圆括号
  5. 实参列表必须与形参列表对应

形参和实参

操作示例:

def add(a,b):
	return a+b
'''
上述例子中,a,b称为形式参数,简称形参,也就是说,形参是在函数定义时使用的,形参的定义需符合标识符命名规则
'''
'''
在调用函数时,传递的参数被称为实参,如add(10,20),10和20就是实参
'''

标识符命名规则重温

原则:

  1. 标识符由字母,数字,下划线组成,且不能以数字开头
  2. Python标识符区分大小写
  3. Python标识符不能使用关键字

建议:

  1. 见名知义,取一个有意义的标识符名称
  2. 在为Python变量命名时,建议类名以大写字母开头的单词命名(如HelloWorld),模块名用小写字母加下划线的方式命名(如low_with_under)

文档字符串

操作示例:

def add(a,b):
'''用于返回a与b的和'''
return a+b
# 上述例子中,两个连续“三个单引号”之间的字符串称为文档字符串,若想查看某函数的文档字符串,
# 可通过help(函数变量名.__doc__)方法获取,如help(add.__doc__)

返回值

return返回值要点:

  1. 如果函数体包含return语句,则结束函数执行并返回值
  2. 如果函数体中不包含return语句,则返回None值
  3. 要返回多个值,可使用列表,元组,字典,集合等将需要返回的值存起来,等最后一起返回
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值