首页>少儿编程>小鸟数据python基础算法速查

小鸟数据python基础算法速查

先进先出算法|FIFO

# -*- coding: utf-8 -*-

def fifo(x):
    queue=[i for i in range(x, 0, -1)]
    while len(queue) > 0:
        print("%d号第%d个出队列"%( queue[-1] ,x - len(queue) + 1))
        queue.pop()
            
fifo(10)

先进后出算法|LIFO

# -*- coding: utf-8 -*-
def lifo(x):
    queue=[i for i in range(x, 0, -1)]
    while len(queue) > 0:
        print("%d号第%d个出队列"%( queue[0] ,x - len(queue) + 1))
        queue.pop(0)
            
lifo(10)

查找实现

# -*- coding: utf-8 -*-
fruits=["桔子","苹果","香蕉","西瓜","水蜜桃","樱桃"]
value="西瓜"
i=0
while i < len(fruits) :
    if fruits[i] == value :
        print( "在下标 %d 处找到了 %s"%(i,value))
        break
    i+=1

二分查找

二分查找后重新划定搜索范围时,“right=mid-1”、“left=mid+1”这个步骤是必不可少的,如果仅仅只是将“left”或“right”的值重设为“mid”,因为整除的存在,检索边界值时会进入无限循环,比如右边界下标为10,当左边界逼近到9的时候,因为19被2整除后仍旧是9,此时将“left=mid”,left的值并没有变动,导致程序的bug。

Quick_search_of_Python_basic_algorithms_for_abddb_p1

# -*- coding:utf-8 -*-
nums=[(x+1)**2 for x in range(20)]
print(nums)
left=0 
right=len(nums)-1
find=400
while left<=right:
    mid=(left+right)//2
    if nums[mid]>find:
        right=mid-1
        print(left,right)
    elif nums[mid]<find:
        left=mid+1
        print(left,right)
    else:
        print("在数组中找到了相同值%s,其下标为%s"%(find,mid))
        break
    if left>right:
        print("数组中好像并不包含这个值哦,换个数试一试吧")
        break

哈希查找

在很多教材里看到过这个词,不太明白为啥要用哈希值去代替原值,真正自己动手做了一遍之后,感觉有了一些较为粗浅的理解。一是利用字典避免了键值的重复,其二是利用相对更为简单的键值代替了原来更为复杂无序的键值,从而在后续的查找中节省了资源。比如一组电话号码的数据,利用某数求余编制2~3位数的键,查找起来自然比10位长的一串数字更为有效率一些。

# -*- coding:utf-8 -*-
HashTable={}
ages = [401, 757, 704, 885, 29, 917, 478, 16, 512, 349,
        81, 459, 454, 612, 103, 520, 331, 18, 596, 268]
print(ages)
n=len(ages)

def buildTable(age,n):
    for one in age:
        address = one % n
        while True:
            if HashTable.get(address)==None:
                HashTable[address]=one
                break
            else:
                address+=1
    print("构建完成的哈希表:",HashTable)

def HashFind(Value,n):
    address=Value%n
    while True:
        if HashTable.get(address)==Value:
            print("元素为%d的哈希地址为%d"%(HashTable[address],address))
            break
        elif HashTable.get(address)!=None:
            address+=1
        else:
            print("哈希表里没有%d"%(Value))
            break

buildTable(ages,n)
HashFind(520,n)

穷举法

# -*- coding:utf-8 -*-
for i in range(21):
    for j in range(34):
        k=100-i-j
        if 5*i+3*j+k*1/3==100:
            print("%d只公鸡,%d只母鸡,%d只小鸡满足题目要求"%(i,j,k))

冒泡排序

# -*- coding:utf-8 -*-
# python中交换值可以采用x,y=y,x的方式
# 当然python本身也实现了列表的排序方法-_-
# 重复造轮子熟悉语法也挺好对吧
lists = [24, 14, 48, 63, 10, 8, 84, 88, 70, 55]
i=0
ilen=len(lists)
while i< ilen:
    j=1
    while j<ilen-i:
        if lists[j-1]>lists[j]:
            middle = lists[j]
            lists[j] = lists[j-1]
            lists[j-1]=middle
        j=j+1
    i=i+1
print(lists)

选择排序

冒泡排序是通过数组相邻元素两两比较,大的排后面,一次比较找到整个数组最大值放在数组最后一个位置。小循环时,通过控制小循环的循环下标range j=len(array)-i-1忽略掉数组最后已经排列好的一个元素,从后往前直到最前面。选择排序是通过从前往后,从第一个数组元素和后面的元素比较,如果后面的元素小,就把该元素的值和后面的继续比较,找到最小值后,和第一个数组元素的值交换,把最小值放到数组的第一个位置。然后通过控制小循环的下标忽略掉第一个已经排好序的数组元素,从第二个元素开始继续循环找到第二小值,放到第二个元素上,以此类推,直至最后。选择排序因每次循环直接找到最小值,因此需要一个变量来记录最小值的数组元素下标。而冒泡因是两两比较,每次将大的值放到后面,所以不需要额外的变量。选择排序的值交换频率更低一些.

# -*- coding:utf-8 -*-
def selectionSort(arr):
    for i in range(len(arr)):
        minId=i
        for j in range(i+1,len(arr)):
            if arr[j]<arr[minId]:
                minId=j
        arr[i],arr[minId]=arr[minId],arr[i]
data = [24, 14, 48, 63, 10, 8, 84, 88, 70, 55]
selectionSort(data)
print(data)

标签: python

移动端可扫我直达哦~

推荐阅读

python 2024-06-28

python中print函数的格式控制符号

%字符:标记转换说明符的开始;转换标志:- 表示左对齐;+ 表示在转换值之前要加上正负号;“” (空白字符)表示正数之前保留空格;0表示转换值若位数不够则用0填充;最小字段宽度:转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽...

少儿编程 python

python 2024-06-27

小鸟数据python语法速查表

Python对大小写敏感,使用半角符号,变量命名采用“_”、数字或字母的组合,建议采用规范的命名方式,比如使用驼峰式命名方式,编程过程中多写注释。基础语法数据类型:整数,浮点,字符串,逻辑值运算符号:+,-,*,/, % , // ,...

少儿编程 python

python 2024-06-18

pyautogui报错误:No module named pytweening

之前利用pyautogui实现了一个类似按键精灵的功能,在一个可写的PDF文件中,动态修改某个单元格的值,并依次打印出来。利用python2.7实现的程序,因为中途换装过python3,换回python2.7版本之后很多库都失效了,年...

少儿编程 python

python 2024-06-17

利用PYTHON批量修改图片的宽高尺寸

将制作完成的产品拍照发客户,是博主的工作之一,原来是用的数码相机,随着手机照片质量的提升,现在用手机拍照也能满足需求。目前在用的手机是xsmax,默认设置下一张照片经常会超过4M,记得购买的第一个u盘的容量也就32M还是64M。遇到客...

少儿编程 python

python 2024-04-08

Python利用tinify API实现批量压缩图片

一直觉得“API”这个词语的书面解释过于高大上,使用下来感觉API就如同一个自动售货机,有需求的人投了一个币进去,然后售货机给了你对应面值的饮料。就比如这个tinify API,核心功能是实现图片的压缩,用户传过去一张图片,它回传一个...

少儿编程 python

python 2024-03-21

利用python批量修改照片名称

博主之前用的iphone6sp,年前闲鱼入了一个二手的xsmax,两者拍摄的照片默认后缀都是大写的"JPG"。小鸟数据博客的主题是自己捣鼓的,技术实力有限,仅能正确识别小写的图片名称,所以某次直接用原图发布文章的时候,发生了图片无法正...

少儿编程 python

python 2023-10-24

Python官网下载速度很慢怎么办

之前一直在Python官网下载安装包,用浏览器自带的下载工具,并没有觉得慢到难以忍受。时隔大半年,手头的存储安装包的u盘不知道落哪里了,于是又一次访问了官网。公司单独拉了一根光纤,然而打开Python官网主页居然就花了半天,心说完犊子...

少儿编程 python

python 2023-09-28

pyautogui中的键盘对应键位的名称

pyautogui可以模拟用户按键,比如需要按回车,我们可以输入“enter”,需要按删除键,我们可以输入“delete”,键位太多记不过来,干脆写篇笔记记录一下吧。顺便一提,利用help可以查看pyautogui的帮助信息:help...

少儿编程 python

python 2023-09-28

利用python自动编辑可编辑pdf并实现自动打印

可编辑的pdf文件不多,工作中很少遇到类似的情况,很多需要用到自动打印的场合,一般就直接把pdf拖入到coreldraw或ai中,转换为矢量图,然后利用vba在编辑软件中实现自动打印。手头上有一份客户发过来的pdf文件,可以直接在文件...

少儿编程 python

python 2023-09-28

python2.7所对应的pyautogui版本是哪个

想安装一个pyautogui,用于实现一个类似按键精灵的效果,因为客户发过来一个可编辑的pdf文件,需要在其中填入对应的序列号,手工填写一次几百张有点儿麻烦,所以考虑用python来组合一套动作,实现自动的操作。于是在win7系统中打...

少儿编程 python

python 2023-06-28

利用python批量修改文件名一例

对python认识不多,虽然也认真的学习过一段时间,在玩魔兽世界怀旧服的时候,曾经实现过一个自动钓鱼的程序,可惜在自己的电脑上跑的好好的,换台电脑就失效了,菜鸟玩家,写的程序不具备兼容性。下载了几个文件,因为防网盘屏蔽的原因,分享者修...

少儿编程 python

python 2023-04-19

python报错AttributeError: 'module' object has no attribute

意图用python批量生成svg格式的条形码,原因有二,其一是以自己的知识储备做不到在线批量生成下载,其二是svg格式可以直接导入coreldraw,然而在家里的电脑上跑得好好的程序,到了公司居然报错了。期间尝试了更改文件位置,更换p...

少儿编程 python