循环嵌套与算法

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]))

上一篇下一篇

猜你喜欢

热点阅读