跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Python 基础语法与数据结构算法实战示例

Python 基础语法与数据结构算法的 17 个实战代码示例。内容涵盖循环控制、列表解包、枚举定义、随机数生成及顺序表的奇偶排序、逆置、删除等经典算法。通过提供详细的代码解析与逻辑说明,帮助初学者夯实编程基础,理解时间复杂度与空间复杂度的权衡,适合用于日常学习与复习参考。

邪神洛基发布于 2025/2/6更新于 2026/7/1565 浏览
Python 基础语法与数据结构算法实战示例

Python 基础语法与数据结构算法实战示例

前言

编程入门阶段,掌握核心语法和常见算法逻辑是构建扎实技术基础的关键。本文精选了 17 个经典代码示例,涵盖 Python 基础控制流、列表操作、枚举机制以及 C/C++ 顺序表的基础算法实现。通过深入理解这些片段背后的原理,初学者可以有效提升逻辑思维能力和代码编写效率。

1. for 循环中的 else 条件

在 Python 中,for...else 结构常被误解。else 块仅在循环正常结束(即未被 break 中断)时执行。这常用于搜索场景:如果找到目标则 break,否则在 else 中处理未找到的情况。

numbers = [2, 4, 6, 8, 1]

for number in numbers:
    if number % 2 == 1:
        print(number)
        break
else:
    print("No odd numbers")

解析: 上述代码遍历列表,发现奇数 1 后打印并跳出循环,因此 else 块不会执行。若列表中全为偶数,则输出 "No odd numbers"。

2. 数字求和

输入两个数字并计算总和是编程中最基础的运算之一。注意处理用户输入时的类型转换,确保进行数值计算而非字符串拼接。

# -*- coding: UTF-8 -*-
# 用户输入数字
num1 = input('输入第一个数字:')
num2 = input('输入第二个数字:')

# 求和
sum_val = float(num1) + float(num2)
# 显示计算结果
print('数字 {0} 和 {1} 相加结果为:{2}'.format(num1, num2, sum_val))

运行示例:

输入第一个数字:1.5
输入第二个数字:2.5
数字 1.5 和 2.5 相加结果为:4.0

3. 随机数生成

使用标准库 random 模块可以生成伪随机数。randint(a, b) 函数返回一个包含 a 和 b 的整数范围内的随机整数。

import random
print(random.randint(0, 9))

解析: 每次执行可能输出 0 到 9 之间的任意整数。该函数常用于模拟、游戏开发或测试数据生成。

4. 将列表中的所有元素作为参数传递给函数

Python 支持解包操作符 *,可以将列表或元组中的元素展开为函数参数。这在需要传递不定数量参数时非常有用。

my_list = [1, 2, 3, 4]

print(my_list)      # [1, 2, 3, 4]
print(*my_list)     # 1 2 3 4

应用: 假设有一个函数 add(a, b, c),可以通过 add(*my_list) 直接调用,无需手动提取每个元素。

5. 获取列表的所有中间元素

利用序列解包特性,可以方便地忽略首尾元素,直接获取中间部分的数据。这比切片操作在某些场景下更直观。

_, *elements_in_the_middle, _ = [1, 2, 3, 4, 5, 6, 7, 8]
print(elements_in_the_middle)  # [2, 3, 4, 5, 6, 7]

解析: 左侧第一个 _ 接收第一个元素,最后一个 _ 接收最后一个元素,中间的 *elements_in_the_middle 收集剩余所有元素。

6. 使用一行代码赋值多个变量

Python 允许同时给多个变量赋值,这被称为多重赋值或元组解包。它提高了代码的简洁性和可读性。

one, two, three, four = 1, 2, 3, 4

扩展: 也可以用于交换变量值,例如 a, b = b, a。

7. Python 清空列表

列表对象提供了 clear() 方法,用于移除列表中的所有元素,使其变为空列表。这是释放内存或重置状态的高效方式。

RUNOOB = [6, 0, 4, 1]
print('清空前:', RUNOOB)
RUNOOB.clear()
print('清空后:', RUNOOB)

输出:

清空前:[6, 0, 4, 1]
清空后:[]

8. 通过 Enum 枚举同一标签或一系列常量的集合

枚举(Enum)是一种数据类型,由一组命名的常量组成。使用 enum 模块可以定义具有唯一值的符号名称,增强代码的可读性和安全性。

from enum import Enum


class Status(Enum):
    NO_STATUS = -1
    NOT_STARTED = 0
    IN_PROGRESS = 1
    COMPLETED = 2

print(Status.IN_PROGRESS.name)  # IN_PROGRESS
print(Status.COMPLETED.value)   # 2

优势: 相比使用魔法数字(如 0, 1),枚举能明确表达业务含义,防止非法值传入。

9. 重复字符串

字符串乘法运算符 * 可以快速复制字符串内容。这在生成占位符、分隔线或测试数据时非常实用。

name = "Banana"
print(name * 4)  # BananaBananaBananaBanana

10. 计算每个月天数

使用 calendar 模块可以获取指定年月的日历信息。monthrange(year, month) 返回一个元组,包含该月第一天是星期几以及该月的总天数。

#!/usr/bin/python3
import calendar
monthRange = calendar.monthrange(2016, 9)
print(monthRange)

解析: 输出 (3, 30) 表示 2016 年 9 月 1 日是星期四(索引 3),该月共有 30 天。

11. 输出指定范围内的素数

素数是只能被 1 和自身整除的大于 1 的自然数。判断素数的基本方法是试除法,检查从 2 到 num-1 是否有因子。

# 输出指定范围内的素数
lower = int(input("输入区间最小值:"))
upper = int(input("输入区间最大值:"))
for num in range(lower, upper + 1):
    if num > 1:
        for i in range(2, num):
            if (num % i) == 0:
                break
        else:
            print(num)

优化建议: 对于大范围查询,可优化至只检查到 sqrt(num)。

12. 计算两数差值

定义函数计算差值时,需注意参数顺序对结果的影响。使用命名参数可以避免因位置混淆导致的错误。

def subtract(a, b):
    return a - b

print(subtract(1, 3))  # -2
print(subtract(3, 1))  # 2

# 使用命名参数
print(subtract(a=1, b=3))  # -2
print(subtract(b=3, a=1))  # -2

13. 奇数移到偶数前

这是一个经典的数组重排问题。要求时间复杂度 O(n),空间复杂度 O(1)。采用双指针法,左指针找偶数,右指针找奇数,相遇前交换。

void move(SqList &L)
{
    int i = 0, j = L.length - 1, k;
    ElemType temp;
    while (i < j)
    {
        // 奇数从前向后找
        while (L.data[i] % 2 == 1)
            i++; // 指向偶数
        // 偶数从后往前找
        while (L.data[j] % 2 == 0)
            j--; // 指向奇数
        if (i < j)
        {
            temp = L.data[i];
            L.data[i] = L.data[j];
            L.data[j] = temp;
        }
    }
}

算法分析: 该方法只需遍历一次数组,通过原地交换完成排序,效率极高。

14. 顺序表元素逆置

将线性表中的元素顺序反转。同样要求空间复杂度 O(1),通常采用首尾对称交换的方法。

void reverse(SqList &L)
{
    int i;
    ElemType x;
    // 只扫描前半部分
    for (i = 0; i < L.length / 2; i++)
    {
        x = L.data[i];
        // L.data[i] 后半部分对应元素为 L.data[L.length-i-1]
        L.data[i] = L.data[L.length - i - 1];
        L.data[L.length - i - 1] = x;
    }
}

说明: 修正了原逻辑中的比较符号错误,确保循环正确终止。例如长度为 7 的表,只需交换前 3 对元素。

15. 删除顺序表最小值元素

查找最小值并用末尾元素填补空缺,最后缩短表长。此操作需保证最小值唯一或仅删除其中一个。

bool Delete_Min(SqList &L, ElemType &value)
{
    // 表长为 0 不成立
    if (L.length == 0)
        return false;
    // 假设第一个元素为最小值
    value = L.data[0];
    // 记录最小值元素下标
    int pos = 0;
    int i;
    // 从第二个元素开始比较
    for (i = 1; i < L.length; i++)
    {
        if (L.data[i] < value)
        {
            value = L.data[i];
            pos = i;
        }
    }
    // 删除位置的元素用最后一个元素取代
    L.data[pos] = L.data[L.length - 1];
    // 表长减一
    L.length--;
    return true;
}

16. 删除值在 x~y 之间的所有数据

从顺序表中删除指定范围内的所有元素。为了保持 O(1) 空间复杂度,不能开辟新数组,需原地移动元素。

方法一:保留非目标元素

void del_xy(SqList &L, ElemType x, ElemType y)
{
    int i, k = 0;
    for (i = 0; i < L.length; i++)
    {
        if (L.data[i] >= x && L.data[i] <= y)
        {
            // 跳过
        }
        else
        {
            L.data[k++] = L.data[i];
        }
    }
    L.length = k;
}

方法二:统计删除个数

void del_xy_v2(SqList &L, ElemType x, ElemType y)
{
    int i = 0, k = 0;
    while (i < L.length)
    {
        if (L.data[i] >= x && L.data[i] <= y)
           k++;
        else
           L.data[i - k] = L.data[i];
    }
    L.length = L.length - k;
}

注意: 原文本中 L.data[j] 已修正为 L.data[i],逻辑已优化为更清晰的保留非目标元素写法。

17. 打印九九乘法表

嵌套循环是打印矩阵类数据的典型应用。外层控制行,内层控制列,利用格式化输出对齐。

for i in range(1, 10):
    for j in range(1, i + 1):
        print('{}x{}={}	'.format(j, i, i * j), end='')
    print()

效果: 输出标准的直角三角形乘法表,便于记忆和展示。

总结

以上示例覆盖了编程语言中常见的控制结构、数据结构操作及基础算法思想。无论是 Python 的动态特性还是 C/C++ 的底层内存管理,理解这些核心片段都有助于解决实际问题。建议读者在本地环境复现代码,并尝试修改参数观察变化,以加深理解。

目录

  1. Python 基础语法与数据结构算法实战示例
  2. 前言
  3. 1. for 循环中的 else 条件
  4. 2. 数字求和
  5. -- coding: UTF-8 --
  6. 用户输入数字
  7. 求和
  8. 显示计算结果
  9. 3. 随机数生成
  10. 4. 将列表中的所有元素作为参数传递给函数
  11. 5. 获取列表的所有中间元素
  12. 6. 使用一行代码赋值多个变量
  13. 7. Python 清空列表
  14. 8. 通过 Enum 枚举同一标签或一系列常量的集合
  15. 9. 重复字符串
  16. 10. 计算每个月天数
  17. 11. 输出指定范围内的素数
  18. 输出指定范围内的素数
  19. 12. 计算两数差值
  20. 使用命名参数
  21. 13. 奇数移到偶数前
  22. 14. 顺序表元素逆置
  23. 15. 删除顺序表最小值元素
  24. 16. 删除值在 x~y 之间的所有数据
  25. 17. 打印九九乘法表
  26. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Python 异步爬虫与 K8S 弹性伸缩:构建高并发数据采集引擎
  • Python 基础语法入门(一)
  • Java 核心面试知识点梳理与实战解析
  • 文心一言开源版测评:能力、易用性与价值解析
  • 设计一个支持万人并发抢购的秒杀系统架构方案
  • 聊聊 MCP:模型上下文协议能做什么,坑在哪里
  • Transformer 解码器架构原理与核心机制详解
  • VibeVoice 与 Whisper 组合:构建本地语音双工交互系统
  • 2025 年 12 月 GESP C++ 四级编程能力认证真题
  • Git 入门:首次将本地项目上传到 GitHub 仓库
  • Python 浏览器自动化:Playwright 结合 AI 的最佳实践
  • JavaScript 结合 Three.js 展示 Sonic 生成的数字人三维效果
  • LLaMA 大模型微调实践与 LoRA 调优经验
  • AI 辅助编程工具对比:Copilot、Cursor、Claude Code 与 Codex 解析
  • Python 中的鸭子类型:理解动态类型
  • 在线 OJ 系统竞赛管理模块开发实战 (Java-Spring)
  • 前端无障碍性:构建包容性的 Web 体验
  • Gossip 协议解读
  • OpenRouter 实战:用一个接口调用多家 AI 模型
  • C++ 量子模拟内存管理的核心挑战与优化技巧

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online