Python 基础语法与数据结构常用代码示例
前言
编程对于初学者来说往往显得神秘且复杂,但实际上,编程语言的核心逻辑并不深奥。大多数程序都是由基础的语句和关键字组合而成的。变量命名、函数定义等虽然需要遵循规范,但核心在于理解逻辑功能。
本文整理了 Python 基础语法及常见数据结构算法的实用代码示例,帮助初学者快速上手并理解底层逻辑。
Python 基础语法与数据结构常用代码示例涵盖了循环控制、列表操作、枚举、随机数生成等基础知识点,以及顺序表元素逆置、删除最小值、区间删除等经典算法实现。内容包含 Python 脚本与 C 语言数据结构代码,适合编程初学者巩固基础并理解常见算法的时间空间复杂度。

编程对于初学者来说往往显得神秘且复杂,但实际上,编程语言的核心逻辑并不深奥。大多数程序都是由基础的语句和关键字组合而成的。变量命名、函数定义等虽然需要遵循规范,但核心在于理解逻辑功能。
本文整理了 Python 基础语法及常见数据结构算法的实用代码示例,帮助初学者快速上手并理解底层逻辑。
在 Python 中,for...else 结构用于遍历列表。如果循环正常结束(未被 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 时触发 break,跳过 else 块。若列表全为偶数,则打印 "No odd numbers"。
实现用户输入两个数字并计算和的功能。
# -*- 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
使用 random 模块生成指定范围内的随机整数。
import random
# 生成 0 ~ 9 之间的随机数
print(random.randint(0, 9))
说明: random.randint(a, b) 返回一个介于 a 和 b 之间(包含两端)的随机整数。
使用解包操作符 * 可以将列表元素展开为函数参数。
my_list = [1, 2, 3, 4]
print(my_list) # 输出:[1, 2, 3, 4]
print(*my_list) # 输出:1 2 3 4
扩展: 此方法常用于调用接收不定数量参数的函数。
利用序列解包语法提取列表中间部分。
_, *elements_in_the_middle, _ = [1, 2, 3, 4, 5, 6, 7, 8]
print(elements_in_the_middle) # 输出:[2, 3, 4, 5, 6, 7]
说明: _ 代表丢弃首尾元素,* 捕获中间所有元素。
Python 支持多重赋值,简洁高效。
one, two, three, four = 1, 2, 3, 4
使用 clear() 方法移除列表中所有元素。
RUNOOB = [6, 0, 4, 1]
print('清空前:', RUNOOB)
RUNOOB.clear()
print('清空后:', RUNOOB)
输出:
清空前:[6, 0, 4, 1]
清空后:[]
枚举类型用于定义一组相关的常量,提高代码可读性。
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
说明: 成员可通过身份比较,枚举本身可迭代。
使用乘法运算符 * 可以快速复制字符串。
name = "Banana"
print(name * 4) # 输出:BananaBananaBananaBanana
利用 calendar 模块获取月份信息。
#!/usr/bin/python3
import calendar
monthRange = calendar.monthrange(2016, 9)
print(monthRange)
输出: (3, 30)
说明: 元组第一个元素表示该月第一天是星期几(0-6),第二个元素为该月总天数。
判断并输出给定区间内的所有素数。
# 输出指定范围内的素数
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)
注意: 内层循环若无 break 则执行 else 块,即找到素数。
使用函数计算差值,注意参数顺序。
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
以下示例展示了顺序表(SqList)的经典操作,涉及时间复杂度 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;
}
}
}
需求: 将顺序表 L 中所有元素逆置,空间复杂度 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;
}
}
修正说明: 原逻辑中 i=L.length/2 已修正为 i < L.length / 2,防止越界。
需求: 删除最小值元素,由最后一个元素填补空位。
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;
}
需求: 删除顺序表中值在 x 到 y 之间的所有元素,效率优先。
方法一:保留非目标元素
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];
i++;
}
L.length = L.length - k;
}
修正说明: 原文本中 L.data[j] 已修正为 L.data[i],确保逻辑正确。
经典的嵌套循环练习。
for i in range(1, 10):
for j in range(1, i + 1):
print('{}x{}={} '.format(j, i, i * j), end='')
print()
编程能力的提升依赖于持续的实践。上述代码涵盖了基础语法控制流、数据结构操作以及经典算法思想。
建议读者在实际环境中运行上述代码,修改参数观察输出变化,从而加深理解。编程没有捷径,唯有坚持训练方能融会贯通。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online