python之循环语句(2)

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. 循环代码优化

  1. 尽量减少循环内部不必要的计算
  2. 嵌套循环中,尽量减少内层循环的计算,尽可能向外提
  3. 局部变量查询较快,尽量使用局部变量
    练习:
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))

其他优化手段:

  1. 连续多个字符串,使用join,不使用+
  2. 列表进行元素插入和删除,尽量在列表尾部操作

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=' ')

个人心得,仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值