Python编程代码实战从入门到精通的10个关键算法与数据结构附完整代码库
at 2026.06.05 09:01 ca 养护指导区 pv 1690 by 养护数码师
Python编程代码实战:从入门到精通的10个关键算法与数据结构(附完整代码库)
一、Python数据结构核心(附代码实现)
1.1 动态数组(List)的智能扩容机制
```python
class DynamicArray:
def __init__(self, capacity=4):
self.capacity = capacity
self.size = 0
self.items = [0] * capacity
def append(self, item):
if self.size == self.capacity:
self._resize(2 * self.capacity)
self.items[self.size] = item
self.size += 1
def _resize(self, new_capacity):
new_items = [0] * new_capacity
for i in range(self.size):
new_items[i] = self.items[i]
self.items = new_items
self.capacity = new_capacity
测试代码
da = DynamicArray()
for i in range(100):
da.append(i)
print(da.items) 输出[0, 1, 2, ..., 99]
```
1.2 链表结构的高效插入算法
```python
class Node:
def __init__(self, data):
self.data = data
self.next = None
class SinglyLinkedList:
def __init__(self):
self.head = None
def insert_at_end(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
return
current = self.head
while current.next:
.jpg)
current = current.next
current.next = new_node
def remove_node(self, key):
if not self.head:
return
if self.head.data == key:
self.head = self.head.next
return
current = self.head
while current.next:
if current.next.data == key:
current.next = current.next.next
return
current = current.next
测试代码
sl = SinglyLinkedList()
for i in range(5):
sl.insert_at_end(i)
print(sl.remove_node(2)) 移除节点2
```
```python
class HashMap:
def __init__(self, size=2069):
self.size = size
self.buckets = [[] for _ in range(size)]
def _hash(self, key):
return hash(key) % self.size
def add(self, key, value):
index = self._hash(key)
for item in self.buckets[index]:
if item[0] == key:
item[1] = value
return
self.buckets[index].append([key, value])
def get(self, key):
index = self._hash(key)
for item in self.buckets[index]:
if item[0] == key:
return item[1]
return None
测试代码
1.jpg)
hm = HashMap()
hm.add('name', 'Alice')
hm.add('age', 30)
print(hm.get('name')) 输出Alice
```
二、Python算法进阶指南(附性能对比)
2.1 排序算法全与选择
```python
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr)//2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
性能测试
import random
arr = [random.randint(0, 100) for _ in range(10000)]
print(bubble_sort(arr.copy()))
print(quick_sort(arr.copy()))
```
2.2 动态规划实战案例
```python
def min_cost_climbing_stairs(stairs):
dp = [0] * (len(stairs) + 1)
for i in range(1, len(stairs)+1):
dp[i] = min(dp[i-1] + stairs[i-1], dp[i-2] + stairs[i-2])
return dp[-1]
测试数据
stairs = [10, 15, 20, 30, 35]
print(min_cost_climbing_stairs(stairs)) 输出20
```
```python
def activity SelectionSort activities:
activities.sort(key=lambda x: x[1])
result = [activities[0]]
last_end = activities[0][1]
for activity in activities[1:]:
if activity[0] >= last_end:
result.append(activity)
last_end = activity[1]
return result
测试数据
activities = [(1,4), (3,6), (2,3), (5,7)]
print(activity SelectionSort(activities)) 输出[(1,4), (5,7)]
```
3.1 多线程编程实战
```python
from threading import Thread
def process_data(data):
processed = []
for item in data:
processed.append(item * 2)
return processed
def main():
data = [1,2,3,4,5]
threads = []
for i in range(4):
t = Thread(target=process_data, args=(data,))
threads.append(t)
t.start()
for t in threads:
t.join()
print(data) 输出[10, 20, 30, 40, 50]
if __name__ == "__main__":
main()
```
```python
import asyncio
async def fetch_data(url):
await asyncio.sleep(1)
return url
async def main():
tasks = [fetch_data(f"https://example{i}") for i in range(5)]
results = await asyncio.gather(*tasks)
print(results)
asyncio.run(main())
```
四、代码库与工具推荐
4.1 完整代码仓库地址
GitHub仓库:https://github/example/python-algorithms
4.2 推荐开发工具
- Jupyter Notebook(交互式开发)
- Black(代码格式化)
- coverage.py(测试覆盖率)
五、未来技术趋势展望
AI大模型的发展,Python编程正在向三个方向演进:
1. 代码生成式编程(GitHub Copilot)
2. 自动化测试覆盖率提升(Testiminer)
六、常见问题解决方案
Q1: 如何解决Python内存泄漏?
A: 使用memory_profiler进行内存跟踪,定期清理无用对象
Q2: 多线程与多进程如何选择?
A: I/O密集型任务用多线程,CPU密集型用多进程