微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Day27 Python的部分算法

系列文章目录

Day01 软件测试基础总结

Day02 测试用例知识点总结(上)

Day03 测试用例知识点总结(下)

Day04 禅道-从安装到卸载

Day05 MysqL的基础使用

Day06 MysqL知识点总结

Day07 MysqL知识点再总结与多表查询

Day08 redis的基础知识

Day08 VMware的安装、Linux系统安装和Linux基础命令

Day09 Linux常用命令总结

Day10 Linux环境部署和项目构建

Day11 shell脚本基础知识

Day12 接口和协议

Day13 Postman的使用

Day13 Windows环境下的JDK安装与Tomcat的启动

Day14 jenkins部署

Day15 jenkins的简单使用

Day16 charles的基本使用

Day17 考试

Day18 考试

Day19 fiddler的简单使用

Day20 Python基础

Day21 python 语句基础

Day22 Python数据类型(上)

Day23 Python数据类型(下)

Day24 Python函数

Day25 Python的文件操作和异常处理

Day26 Python面向对象

Day27 Python的部分算法


目录

系列文章目录

前言

1.列表推导式

2.字典推导式

 3.集合推导式

 4.元组推导式

二、递归

三、算法 

1.快速排序

 2.冒泡排序

 3.选择排序

总结


前言

        本章节是Python学习的最后一天,简单介绍推导式与递归,最后是Python算法中的快速排序、冒泡排序和选择排序。


一、推导式

Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。

作用:用一个表达式创建一个有规则的列表或者控制一个有规律列表

推导式也称生成式。

Python 支持各种数据结构的推导式:

  • 列表(list)推导式
  • 字典(dict)推导式
  • 集合(set)推导式
  • 元组(tuple)推导式

1.列表推导式

创建0~10的列表

list=[i for i in range(11)]
print(list)

'''
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
'''

 创建0~10中偶数的列表

list=[i for i in range(0,11,2)]
print(list)

'''
[0, 2, 4, 6, 8, 10]
'''
list=[i for i in range(11) if i%2==0]
print(list)

'''
[0, 2, 4, 6, 8, 10]
'''

使用多个for循环创建列表[(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]

list=[(i,j) for i in range(1,3) for j in range(3)]
print(list)

'''
[(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
'''

2.字典推导式

创建一个字典:字典key是1-5数字,value是这个数字的2次方

dict1 = {i:i*2 for i in range(1,5)}
print(dict1)

'''
{1: 2, 2: 4, 3: 6, 4: 8}
'''

 将两个列表组成字典,len()中使用较短的列表

list11=["name","age","sex"]
list22=["jack","30","男"]
dict1 = {list11[i]:list22[i] for i in range(len(list22))}
print(dict1)

'''
{'name': 'jack', 'age': '30', 'sex': '男'}
'''

 3.集合推导式

创建一个集合,数据为下发列表2次方

结合元素唯一,重复元素删除

list1=[1,1,2,3]
set1={i**2 for i in list1}
print(set1)

'''
{1, 4, 9}
'''

 4.元组推导式

元组推导式和列表推导式的用法也完全相同,只是元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是中括号 [],另外元组推导式返回的结果是一个生成器对象

tu=(i for i in range(11))
print(tu)            #返回的是生成器对象
print(tuple(tu))     # 使用 tuple() 函数,可以直接将生成器对象转换成元组

'''
<generator object <genexpr> at 0x000001FD01969C80>
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
'''

二、递归

递归是一种编程思想,简单来说就是自己调自己,递归需要出口,不然会无限循环。

#累加
def sum(n):
    if n==1:             #if是出口
        return 1
    return n+sum(n-1)    #自己调用自己

print(sum(100))

'''
5050
'''

三、算法 

1.快速排序

步骤:

1.在列表中随机找到一个基准(base,一般是索引为0的那个数)

2.使用base与其他数挨个比较,比base小的放left列表中,比base大的放在right列表中

3.将左右列表递归循环,最后拼接列表返回

def quicksort(list):
    if len(list)<2:
        return list
    else:
        base=list[0]
        left=[i for i in list if i<base]
        right=[i for i in list if i>base]
        return quicksort(left)+[base]+quicksort(right)

li=[23,45,24,67,42,88,32,78,76,21,33,4,12,78,42]
print(quicksort(li))

'''
[4, 12, 21, 23, 24, 32, 33, 42, 45, 67, 76, 78, 88]
'''

 2.冒泡排序

步骤:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

两层for循环嵌套,外层控制排多少遍(外层列表长-1是因为次算法最多这么多次就能排完),内层控制排一趟列表的每一个元素(内层列表长-1是因为,比较时有使用i+1元素,会出现indexError)

def bubblesort(list):
    for j in range(len(list)-1):
        for i in range(len(list)-1):
            if list[i+1]<list[i]:
                list[i+1],list[i]=list[i],list[i+1]
    return list

li=[23,45,24,67,42,88,32,78,76,21,33,4,12,78,42]
print(bubblesort(li))

'''
[4, 12, 21, 23, 24, 32, 33, 42, 42, 45, 67, 76, 78, 78, 88]
'''

 3.选择排序

  1. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
  2. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
  3. 重复第二步,直到所有元素均排序完毕。
def selectionSort(list):
   for i in range(len(list) - 1):
       minIndex = i
       for j in range(i + 1, len(list)):
           if list[j] < list[minIndex]:
               minIndex = j
       if i != minIndex:
           list[i], list[minIndex] = list[minIndex], list[i]
   return list

li=[23,45,24,67,42,88,32,78,76,21,33,4,12,78,42]
print(selectionSort(li))

'''
[4, 12, 21, 23, 24, 32, 33, 42, 42, 45, 67, 76, 78, 78, 88]
'''


总结

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐