• 【查找、排序~python】



    个人昵称:lxw-pro
    个人主页:欢迎关注 我的主页
    个人感悟: “失败乃成功之母”,这是不变的道理,在失败中总结,在失败中成长,才能成为IT界的一代宗师。

    python 线性查找

    线性查找指按一定的顺序检查数组中每一个元素,直到找到所要寻找的特定值为止

    def search(arr, n, x):
    
        for i in range(0, n):
            if arr[i] == x:
                return i
        return -1
    
    
    # 在数组arr中查找字符D
    arr = ['A', 'B', 'C', 'D', 'E']
    x = 'C'
    n = len(arr)
    result = search(arr, n, x)
    if result == -1:
        print("元素不在数组中")
    else:
        print("元素在数组中的索引为", result)
    
    
    # -*-1-*-
    def LinearSearch(list):
        num = int(input('Number:\t'))
        counter = 0
        null = 0
    
        for i in list:
            if i == num:
                print('Find number {} in place {}'.format(num,counter))
            else:
                null += 1
            counter += 1
        if null == counter:
            print('Don\'t.csv find it.')
    
    
    list = {1, 2, 5, 8, 9, 12, 16, 18, 20, 0}
    LinearSearch(list)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    整体结果如下:

    在这里插入图片描述


    Python 二分查找

    二分搜索是一种在有序数组中查找某一特定元素的搜索算法
    这种搜索算法每一次比较都使搜索范围缩小一半

    # 递归法:
    # 返回x在arr中的索引,如果不存在返回-1:
    def binarySearch (arr, l, r, x):
        if r >= l:
            mid = int(l + (r - l)/2)
    
            # 元素整好的中间位置
            if arr[mid] == x:
                return mid
    
            # 元素小于中间位置的元素,只需要在比较左边的元素
            elif arr[mid] > x:
                return binarySearch(arr,l,mid-l,x)
    
            # 元素大于中间位置的元素,只需要在比较右边的元素
            else:
                return binarySearch(arr,mid+l,r,x)
    
        else:
            # 不存在
            return -1
    
    
    # 测试数组
    arr = [2, 3, 4, 8, 20]
    x = 8
    
    # 函数调用
    result = binarySearch(arr,0,len(arr)-1,x)
    
    if result != -1:
        print("元素在数组中的索引为 %d" % result)
    else:
        print("元素不在数组中")
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    运行结果如下:

    在这里插入图片描述

    ————————————————————————————————————————————

    python 插入排序

    插入排序是一种简单直观的排序算法
    它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入

    def insertionSort(arr):
        for i in range(1, len(arr)):
            key = arr[i]
            j = i-1
            while j >= 0 and key < arr[j]:
                arr[j+1] = arr[j]
                j -= 1
            arr[j+1] = key
    
    
    arr = [2, 1, 6, 8, 5, 20, 12]
    insertionSort(arr)
    print("排序后的数组:")
    for i in range(len(arr)):
        print("%d" % arr[i], end=' ')	# 输出 1 2 5 6 8 12 20 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    arr = [20, 5, 8, 6, 9, 12, 52, 62, 4, 9]
    
    def insertionSort(arr):
        for i in range(1,len(arr)):
            j = i
            while j > 0:
                if arr[j] < arr[j-1]:
                    arr[j-1],arr[j] = arr[j],arr[j-1]
                j -= 1
        return arr
    
    
    print(insertionSort(arr))	# 输出 [4, 5, 6, 8, 9, 9, 12, 20, 52, 62]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    python 快速排序

    '''
    快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,
    然后递归地排序两个子序列。
    
    步骤为:
    
    挑选基准值:从数列中挑出一个元素,称为"基准"(pivot);
    分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(与基准值相等的数可以到任何一边)。在这个分割结束之后,对基准值的排序就已经完成;
    递归排序子序列:递归地将小于基准值元素的子序列和大于基准值元素的子序列排序。
    递归到最底部的判断条件是数列的大小是零或一,此时该数列显然已经有序。
    
    选取基准值有数种具体方法,此选取方法对排序的时间性能有决定性影响
    
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    可尝试写出快速排序算法的代码,毕竟代码这东西,用心打的多啦,效果真的非常好!!

    ————————————————————————————————————————————

    (我最晒无限循环)代码如下:

    import time, os
    
    
    def main():
        content = '我最晒我最晒我最晒你也最晒'
        while True:
            os.system('cls')
            print(content)
            time.sleep(0.2)
            content = content[1:] + content[0]
    
    
    if __name__ == '__main__':
        main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    ***记得用鼠标点控制台上的红色正方形按钮——停止运行,不然电脑迟早崩溃***

    运行结果如下:

    我最帅
    ————————————————————————————————————————————

    Pandas 每日一练:

    print()只为转行,方便查看运行结果

    # -*- coding = utf-8 -*-
    # @Time : 2022/7/20 14:07
    # @Author : lxw_pro
    # @File : pandas-3 练习.py
    # @Software : PyCharm
    
    import pandas as pd
    import numpy as np
    
    lxw3 = {"project": ['Python', 'Java', 'C', 'MySQL', 'Linux', 'Math', 'English', 'Python'],
           "popularity": [91, 88, 142, 136, np.nan, 146, 143, 148]}
    
    df = pd.DataFrame(lxw3)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    11、将DataFrame保存为EXCEL

    df.to_excel("test3.xlsx")
    print("over!")       # 显示完成情况(可不写)
    
    print()		# 转行,方便查看结果
    
    • 1
    • 2
    • 3
    • 4

    12、查看数据行列数

    hl = df.shape
    print(f"数据行列数为:{hl}")
    
    print()
    
    • 1
    • 2
    • 3
    • 4

    13、提取popularity列值大于142小于150的行

    tq3 = df[(df['popularity'] > 142) & (df['popularity'] < 150)]
    print("提取popularity列值大于142小于150的行为:\n", tq3)
    
    print()
    
    • 1
    • 2
    • 3
    • 4

    14、交换两列位置(两个方法)

    # 法一:
    cols = df.columns[[1, 0]]   # 注意是两个中括号
    df = df[cols]
    print(df)
    
    print()
    
    # 法二:
    tmp = df['popularity']
    df.drop(labels=['popularity'], axis=1, inplace=True)
    df.insert(0, 'popularity', tmp)
    print(df)
    
    print()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    15、提取popularity列最大值所在行

    print(df[df['popularity'] == df['popularity'].max()])
    
    • 1

    相关运行结果如下:

    11-13:
    在这里插入图片描述
    14-15:
    在这里插入图片描述


    每日一言:

    为什么时光叫做时光呢?
    大慨是因为每一段时间里,都会有一份光吧!


    持续更新中…

    点赞,你的认可是我创作的动力
    收藏,你的青睐是我努力的方向
    评论,你的意见是我进步的财富
    关注,你的喜欢是我长久的坚持
    在这里插入图片描述

    欢迎关注微信公众号程序人生6】,一起探讨学习哦!!!

  • 相关阅读:
    Spark入门介绍
    【FLink】水位线(Watermark)
    beautifulsoup
    如何在Django中使用模板
    CAD Exchanger SDK 3.22.0 Crack
    动态规划算法
    【C指针详解】初阶篇
    ClickHouse(05)ClickHouse数据类型详解
    【线段树 区间位运算模板】3117划分数组得到最小的值之和
    URL.createObjectURL()和URL.revokeObjectURL()
  • 原文地址:https://blog.csdn.net/m0_66318554/article/details/125067268