1. for 循环和可迭代对象
- for循环通常用于可迭代对象的遍历
例子:遍历一个元祖或列表
for i in [1, 2, 3, 4]:
print(i, end='\t')
print()
for i in (1, 2, 3, 5):
print(i, end='\n')
for i in 'abcde': # --字符串也可以遍历
print(i, end='\t')
2. 可迭代对象
- 字典的可迭代对象
d = {'name': 'zs', 'age': '18'}
for i in d: # --返回key
for i in d.keys(): # --返回key
for i in d.values(): # --返回value
for i in d.items(): # --返回键值对,元组
3. range() 函数
- range对象是一个迭代对象,用来产生指定范围的数字序列
range(start,end,step)
for i in range(10):
for i in range(3, 10):
for i in range(3, 10, 2):
利用for循环计算1-100的总和,偶数和,基数和
sum_all = 0
sum_even = 0
sum_odd = 0
for i in range(101):
sum_all += i
if i % 2 == 0:
sum_odd += i
elif i % 2 == 1:
sum_even += i
print('和为:{}'.format(sum_all))
print('偶数和为:{}'.format(sum_odd))
print('奇数和为:{}'.format(sum_even))
4. 嵌套循环
- 一个嵌套体里嵌入另一个循环
in:
for i in range(5):
for j in range(5):
print(i, end='\t')
print()
out:
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
输出一个表格形式的代码
a = {'name': 'zs', 'age': '18', 'salary': 30000, 'city': 'beijing'}
b = {'name': 'ls', 'age': '19', 'salary': 20000, 'city': 'shanghai'}
c = {'name': 'ww', 'age': '20', 'salary': 10000, 'city': 'shenzhen'}
info = [a, b, c]
# print(info)
print(a.keys())
for i in info:
if i.get('salary') > 15000:
print(i)
5. break 语句
- 使用在for while语句中,用来结束整个语句,如果是嵌套循环,则结束当前循环
while True:
a = input('请输入一个字符(q表示结束):')
if a == 'q':
print("结束输入")
break
else:
print(a)
5. continue 语句
- 用来结束本次循环,继续下一次,多个循环嵌套时,continue应用于最近一层循环
salary_sum = 0
count = 0
while True:
salary = float(input('请输入员工薪资:'))
if salary < 0:
print('输入错误,请重新输入')
continue
if salary == 0:
print('输入完成')
break
salary_sum += salary
count += 1
print('员工数量是:{0},合计薪水是:{1},平均薪资是:{2}'.format(count, salary_sum, salary_sum/count))
6. else 语句
- while for循环可以附带一个slse语句,如果循环语句没有被break结束,则会执行else语句
salary_sum = 0
salarys = []
for i in range(4):
s = input('请输入4名员工的薪资(按q或Q结束输入):')
if s.upper() == 'Q':
print('录入完成,退出')
break
if float(s) < 0:
continue
salarys.append(float(s))
salary_sum += float(s)
print(salarys)
else:
print('输入完成')
print('总薪资:{0},平均薪资:{1},工资明细:{2}'.format(salary_sum, salary_sum/len(salarys), salarys))
7. 循环代码优化
- 尽量减少循环内部不必要的计算
- 嵌套循环中,尽量减少内层循环的计算,尽可能向外提
- 局部变量查询较快,尽量使用局部变量
练习:
import time
start =time.time()
for i in range(1000):
result = []
for j in range(10000):
result.append(i*1000+j*100) # --将内村换i*1000提到外循环
end = time.time()
print('耗时:{0}'.format(end - start))
start2 =time.time()
for i in range(1000):
result = []
c = i*1000
for j in range(10000):
result.append(c+j*100)
end2 = time.time()
print('耗时:{0}'.format(end2 - start2))
其他优化手段:
- 连续多个字符串,使用join,不使用+
- 列表进行元素插入和删除,尽量在列表尾部操作
9. 使用zip()进行并行迭代
- 通过zip()函数对多个序列进行并行迭代
names = ('zs', 'ls', 'ww', 'sj')
ages = (18, 19, 20, 25)
jobs = ('老师', '程序员', '公务员')
for name, age, job in zip(names, ages, jobs):
print("{0}---{1}---{2}".format(name, age, job))
10. 推导式创建序列
- 推导式是从一个或多个迭代器快速创建序列的一种方法,将循环和条件判断结合,避免代码冗长.
10.1列表推导式
- [ 表达式 for item in 可迭代对象 if 条件判断 ]
list1 = [i**2 for i in range(10) if i % 2 == 0]
list2 = [i for i in 'abcdef']
list3 = [[row, col] for row in range(0, 10) for col in range(1, 10)] #-- 嵌套循环
for i in list3:
print(i)
10.2 字典推导式
- {key_expression:value_expression for 表达式 in 可迭代对象}
统计文本中的词频
my_text = 'i love you,i love sxt,i love gaoqi'
char_count = {c: my_text.count(c) for c in my_text}
print(char_count)
10.3 生成器推导式(生成元组)
gnt = (i for i in range(10) if i % 2 == 0)
for x in gnt:
print(x, end=' ')
个人心得,仅供参考