循环嵌套与算法
2020-10-05 本文已影响0人
码上版码
本节大纲
循环嵌套
列表生成式
排序算法
循环嵌套
boys = ['mike' , 'jack', 'tom']
girls = ['Lisa' , 'limed', 'Mary']
# 处理所有的可能性组合
# 用debug查看一下这个过程
for boy in boys:
for girl in girls:
print('%s shakes %s' % (boy,girl))
"""
嵌套循环执行顺序
先从外层循环里面取一个原素,再执行内层里的元素
当内层的循环都执行完后,再继续执行外层循环
"""
列表生成式
'''
员工税前工资列表
[10000, 15000, 8000, 4000, 6000]
每个员工扣税10%
请计算出所有员工的税后工资,存在列表中
'''
pre_tax = [10000, 15000, 8000, 4000, 6000] # 税前工资列表
after_tax = [] # 税后工资列表
for one in pre_tax: # 遍历税前工资
after_tax.append(one*(1-0.1)) # 将税后工资存储在列表中
print(after_tax) # 打印税后工资
# 列表生成式代码表达:
# 优势:简洁,一般适合简单的for循环;劣势:如果逻辑复杂,不好扩展
after_tax = [one*(1-0.1) for one in pre_tax] # 计算税后工资
print(after_tax) # 打印税后工资
排序算法
alist = [9,0,2,5,8]
alist.sort(reverse=False) # sort(reverse=True)降序;sort(reverse=False)升序
print(alist)
print(alist[::-1]) # 通过切片倒叙
print(alist.reverse()) # 翻转
alist = [9,0,5,2]
'''
要点:
1- 找n-1次较大值
2- 每一次较大值如何找
相邻元素对比,大的向后移,这个过程执行n-1次
3- 实现过程:
第1个较大值:9
[9,0,5,2] 9与0比,9大,交换位置[0,9,5,2]
[0,9,5,2] 9与5比,9大,交换位置[0,5,9,2]
[0,5,9,2] 9与2比,9大,交换位置[0,5,2,9]
第2个较大值:5
[0,5,2,9] 0与5比,5大,不交换位置[0,5,2,9]
[0,5,2,9] 5与2比,5大,交换位置[0,2,5,9]
第3个较大值:2
[0,5,2,9] 0与2比,2大,不交换位置[0,2,5,9]
'''
# 1- 找len-1次较大值
for one in range(0,len(alist)-1): # (0,4-1) 0,1,2 3个较大值
# 2- 每一次较大值怎么去实现,相邻元素对比
for j in range(0,len(alist)-1-one):
# 第1次较大值9 one==0,j==(0,4-1-0) 0,1,2 3个
# 第2次较大值5 one==1,j==(0,4-1-1) 0,1 2个
# 第3次较大值2 one==2,j==(0,4-1-2) 0 2个
# 是否要交换位置
# 如果前者大于后者
if alist[j] > alist[j+1]:
# 交换位置--临时变量法
alist[j],alist[j+1] = alist[j+1],alist[j]
print(alist)
# 另一种排序算法
'''
[3,5,7,2]
创建一个新的列表newList
先找出所有元素中最小的,append在newList里面
再找出剩余的所有元素中最小的,append在newList里面
依此类推,直到所有的元素都放到newList里面
'''
def sort(oldList):
newList = []
while len(oldList) > 0:
theMin = oldList[0] # 记录当前循环最小元素
minIdx = 0 # 记录当前最小元素的下标
idx = 0 # 指向当前元素下标
for one in oldList:
if theMin > one:
theMin = one
minIdx = idx
idx += 1
oldList.pop(minIdx)
newList.append(theMin)
return newList
print(sort([1,3,5,7,34,23,55,56,2,3,4]))