# 算法性
算法不等同于数学中的计算方法
# 算法特性
- 确定性
- 可行性
- 有穷性
- 输入
- 输出
# 评价算法优劣
- 正确性
- 可读性
- 健壮性
- 高效性
# 随机数
# 随机整数
randint(a, b)
,返回 [a, b]
的随机整数randrange(a, b)
,返回 [a, b)
的随机整数
# 随机浮点数
uniform(a, b)
,返回 [a, b]
的随机浮点数random()
,返回 [0, 1)
的随机浮点数a + (b - a) * random()
,返回 [a, b)
的随机浮点数
# 循环
若要在 for 循环正常结束之后,执行某条语句,可以使用
Python1 2 3 4
| for i in range(....): xxxxxx else: xxxx
|
# 切片
- 列表切片是左闭右开
s[:k]
,左侧值默认为 0s[k:]
,右侧值默认为 len(s)
- 出现负数的情况:
- 最后一个是 −1,往前类推
s[:-k]
,返回前 len(s) - k
个s[-a:-b]
,a 必须比 b 大,不然会返回空,不是报错!s[a:b:c]
,a - 起始,b - 终止,c - 步长c = 0
,报错c > 0
,从左向右取c < 0
,从右向左取
# 元组、列表、字典
特性 | 集合( set ) | 列表( list ) | 字典( dict ) | 元组( tuple ) |
---|
有序性 | ❌ 无序 | ✅ 有序 | ✅ 有序(Python 3.7+) | ✅ 有序 |
唯一性 | ✅ 元素唯一 | ❌ 允许重复 | ✅ 键唯一 | ❌ 允许重复 |
可变性 | ✅ 可增删元素 | ✅ 可修改 | ✅ 可增删键值对 | ❌ 不可变 |
语法 | {1, 2, 3} | [1, 2, 3] | {"a": 1, "b": 2} | (1, 2, 3) |
空对象 | set() | [] | {} | () |
元素类型 | 必须可哈希(不可变) | 任意类型 | 键必须可哈希,值任意 | 任意类型 |
Python1 2 3 4 5 6 7
| a = (1, 2)
b = [1, 2]
c = {"a":b}
d = {1, 2}
|
# 元组
- 内容不可修改
- 括号可省略
Python1 2 3 4 5 6 7 8 9 10 11 12 13
| t = ('apple', 'banana', 'cherry') for item in t: print(item) for i, item in enumerate(t): print(f"索引 {i}: {item}") print(t[i])
t = (1, 2, 3, 2, 4, 2) print(t.count(2)) print(t.index(3))
|
# 列表
- 列表内元素数据类型可以不同
Python1 2 3 4 5 6 7 8 9 10 11 12 13
| lst = [1, 2, 3] lst[0] = 10 lst[1:3] = [20, 30] lst.append(4) lst.insert(1, 15)
nums = [3, 1, 4, 2] nums.sort() sorted_nums = sorted(nums) words = ['banana', 'apple', 'cherry'] words.sort(key=len)
|
# 浅拷贝
# 特点
• 只复制列表的顶层元素,不会递归复制嵌套的可变对象(如子列表、字典等)
・如果原列表包含可变对象(如子列表),浅拷贝后的嵌套对象与原列表共享引用
Python1 2 3 4
| import copy
original = [1, 2, [3, 4]] shallow_copy = copy.copy(original)
|
# 示例
Python1 2 3 4 5 6 7 8 9 10 11 12
| original = [1, 2, [3, 4]] shallow_copy = original.copy()
shallow_copy[0] = 10 print(original) print(shallow_copy)
shallow_copy[2][0] = 30 print(original) print(shallow_copy)
|
# 图示
Show1 2 3 4
| 原列表: [1, 2, [3, 4]] ↑ ↑ | | 浅拷贝: [10, 2, [30, 4]] # 嵌套列表是共享的!
|
# 深拷贝
# 特点
• 递归复制所有嵌套的可变对象,完全独立于原列表。
・修改深拷贝后的列表(包括嵌套对象)不会影响原列表。
# 创建方式
Python1 2 3 4
| import copy
original = [1, 2, [3, 4]] deep_copy = copy.deepcopy(original)
|
# 示例
Python1 2 3 4 5 6 7
| original = [1, 2, [3, 4]] deep_copy = copy.deepcopy(original)
deep_copy[2][0] = 30 print(original) print(deep_copy)
|
# 图示
Show1 2 3 4
| 原列表: [1, 2, [3, 4]] ↑ ↑ | | 深拷贝: [1, 2, [30, 4]] # 嵌套列表也是独立的!
|
# 深浅拷贝的对比
特性 | 浅拷贝(Shallow Copy) | 深拷贝(Deep Copy) |
---|
复制层级 | 仅顶层 | 所有嵌套层级 |
嵌套对象 | 共享引用 | 完全独立 |
内存占用 | 较少 | 较多(递归复制所有嵌套对象) |
适用场景 | 简单列表(无嵌套或嵌套不可变) | 复杂嵌套结构(需完全独立) |
修改影响 | 嵌套对象会影响原列表 | 完全不影响原列表 |
# 列表的排序
Python1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| my_list = [3, 1, 4, 1, 5, 9, 2] my_list.sort() my_list.sort(reverse=True)
words = ["apple", "banana", "cherry", "date"] words.sort(key=len)
sorted_list = sorted(my_list, key=abs, reverse=True)
students = [ {"name": "Alice", "score": 90}, {"name": "Bob", "score": 75}, {"name": "Charlie", "score": 88} ]
students_sorted = sorted(students, key=lambda x: x["score"])
|
# 字典
# 字典排序
Python1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| my_dict = {"b": 2, "a": 1, "c": 3} sorted_keys = sorted(my_dict)
sorted_items = sorted(my_dict.items()) print(sorted_items)
sorted_items_desc = sorted(my_dict.items(), reverse=True) print(sorted_items_desc)
sorted_by_value = sorted(my_dict.items(), key=lambda x: x[1]) print(sorted_by_value)
people = [ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 20}, {"name": "Alice", "age": 20} ]
sorted_people = sorted(people, key=lambda x: (x["age"], x["name"])) print(sorted_people)
|
# 集合
- 集合内元素是无序的
- 会自动去重
- 可以动态添加 / 删除元素
- 内部元素需是不可变类型(整数、元组、字符串)
Python1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| c = {1, 2, 3}
print(2 in c)
c.add(4) c.discard(99)
a = {1, 2, 3} b = {2, 3, 4} print(a | b) print(a & b) print(a - b) print(a ^ b)
|
# Lambda 函数
Python1 2 3 4 5 6 7
| square = lambda x: x ** 2 print(square(5))
def square(x): return x ** 2
|