前言
经常有同学苦恼,学了 Python 基础之后找不到合适的练手机会。为此,有位热心人创建了一个项目,搜集整理了一堆实用的 Python 代码小例子。这些小例子包括但不限于:Python 基础、Web 开发、数据科学、机器学习等方向,短小精炼,力争让你快速掌握一个小技巧。
本文整理了 42 个 Python 实用小例子,涵盖基本操作、基础算法、列表字典处理、文件操作、正则爬虫、绘图及深度学习入门等内容。通过简洁的代码示例展示了链式比较、二分搜索、列表展开、字典合并、变位词检测、文件查找、天气数据解析、词频云图生成、生成器应用及 Keras 模型构建等核心技巧。文章去除了无关推广信息,专注于技术实现与代码逻辑,适合初学者巩固基础及进阶开发者查阅参考。

经常有同学苦恼,学了 Python 基础之后找不到合适的练手机会。为此,有位热心人创建了一个项目,搜集整理了一堆实用的 Python 代码小例子。这些小例子包括但不限于:Python 基础、Web 开发、数据科学、机器学习等方向,短小精炼,力争让你快速掌握一个小技巧。
今天我们就挑选了其中的 42 个例子分享给大家,涵盖基本操作、算法、数据结构、文件处理等多个方面。
Python 支持链式比较运算,可以简化判断逻辑。
i = 3
print(1 < i < 3) # False
print(1 < i <= 3) # True
利用字典映射运算符函数,避免冗长的条件判断。
from operator import *
def calculator(a, b, k):
return {
'+': add,
'-': sub,
'*': mul,
'/': truediv,
'**': pow
}[k](a, b)
print(calculator(1, 2, '+')) # 3
print(calculator(3, 4, '**')) # 81
通过三元表达式动态选择函数执行。
from operator import (add, sub)
def add_or_sub(a, b, oper):
return (add if oper == '+' else sub)(a, b)
print(add_or_sub(1, 2, '-')) # -1
注意中文字符在 UTF-8 编码下通常占用多个字节。
def str_byte_len(mystr):
return len(mystr.encode('utf-8'))
print(str_byte_len('i love python')) # 13(个字节)
print(str_byte_len('字符')) # 6(个字节)
遍历字符串统计目标字符出现次数。
def search_n(s, c, n):
size = 0
for i, x in enumerate(s):
if x == c:
size += 1
if size == n:
return i
return -1
print(search_n("fdasadfadf", "a", 3)) # 结果为 7,正确
print(search_n("fdasadfadf", "a", 30)) # 结果为 -1,正确
常用于评分系统,去除极端值后计算平均分。
def score_mean(lst):
lst.sort()
lst2 = lst[1:(len(lst)-1)]
return round((sum(lst2)/len(lst2)), 2)
print(score_mean([9.1, 9.0, 8.1, 9.7, 19, 8.2, 8.6, 9.8])) # 9.07
Python 特有的元组解包语法,无需临时变量。
def swap(a, b):
return b, a
print(swap(1, 0)) # (0, 1)
高效查找有序数组中的元素,时间复杂度为 O(log n)。
def binarySearch(arr, left, right, x):
while left <= right:
mid = int(left + (right - left) / 2)
if arr[mid] == x:
print(f'found {x} 在索引位置{mid}处')
return mid
elif arr[mid] < x:
left = mid + 1
elif x < arr[mid]:
right = mid - 1
return -1
使用 NumPy 生成网格坐标点。
import numpy as np
x, y = np.mgrid[0:5, 0:5]
result = list(map(lambda xe, ye: [(ex, ey) for ex, ey in zip(xe, ye)], x, y))
print(result)
嵌套循环输出九九乘法表。
for i in range(1, 10):
for j in range(1, i+1):
print('{0}*{1}={2}'.format(j, i, j*i), end="\t")
print()
递归处理多维列表结构。
from collections.abc import Iterable
def flatten(input_arr, output_arr=None):
if output_arr is None:
output_arr = []
for ele in input_arr:
if isinstance(ele, Iterable):
flatten(ele, output_arr)
else:
output_arr.append(ele)
return output_arr
print(flatten([[1, 2, 3], [4, 5]], [6, 7])) # [6, 7, 1, 2, 3, 4, 5]
根据指定大小分割列表。
from math import ceil
def divide(lst, size):
if size <= 0:
return [lst]
return [lst[i * size:(i+1)*size] for i in range(0, ceil(len(lst) / size))]
r = divide([1, 3, 5, 7, 9], 2) # [[1, 3], [5, 7], [9]]
迭代生成斐波那契数列。
def fibonacci(n):
if n <= 1:
return [1]
fib = [1, 1]
while len(fib) < n:
fib.append(fib[len(fib) - 1] + fib[len(fib) - 2])
return fib
print(fibonacci(5)) # [1, 1, 2, 3, 5]
利用 bool 函数的真值测试特性。
def filter_false(lst):
return list(filter(bool, lst))
print(filter_false([None, 0, False, '', [], 'ok', [1, 2]])) # ['ok', [1, 2]]
安全获取列表第一个元素。
def head(lst):
return lst[0] if len(lst) > 0 else None
print(head([])) # None
print(head([3, 4, 1])) # 3
安全获取列表最后一个元素。
def tail(lst):
return lst[-1] if len(lst) > 0 else None
print(tail([])) # None
print(tail([3, 4, 1])) # 1
统一输入格式以便后续处理。
from collections.abc import Iterable
def cast_iterable(val):
return val if isinstance(val, Iterable) else [val]
print(cast_iterable('foo')) # foo
print(cast_iterable(12)) # [12]
print(cast_iterable({'foo': 12})) # {'foo': 12}
比较多个列表的长度。
def max_length(*lst):
return max(*lst, key=lambda v: len(v))
r = max_length([1, 2, 3], [4, 5, 6, 7], [8]) # [4, 5, 6, 7]
统计列表中频率最高的元素。
def max_frequency(lst):
return max(lst, default='列表为空', key=lambda v: lst.count(v))
lst = [1, 3, 3, 2, 1, 1, 2]
print(max_frequency(lst)) # 1
嵌套最大值查找。
def max_lists(*lst):
return max(max(*lst, key=lambda v: max(v)))
print(max_lists([1, 2, 3], [6, 7, 8], [4, 5])) # 8
嵌套最小值查找。
def min_lists(*lst):
return min(min(*lst, key=lambda v: max(v)))
print(min_lists([1, 2, 3], [6, 7, 8], [4, 5])) # 1
利用集合去重特性。
def has_duplicates(lst):
return len(lst) != len(set(lst))
x = [1, 1, 2, 2, 3, 2, 3, 4, 5, 6]
y = [1, 2, 3, 4, 5]
print(has_duplicates(x)) # True
print(has_duplicates(y)) # False
使用 Counter 统计频率。
from collections import Counter
def find_all_duplicates(lst):
c = Counter(lst)
return list(filter(lambda k: c[k] > 1, c))
print(find_all_duplicates([1, 2, 2, 3, 3, 3])) # [2, 3]
切片操作实现反转。
def reverse(lst):
return lst[::-1]
print(reverse([1, -2, 3, 4, 1, 2])) # [2, 1, 4, 3, -2, 1]
生成指定数量的浮点数序列。
def rang(start, stop, n):
start, stop, n = float('%.2f' % start), float('%.2f' % stop), int('%.d' % n)
step = (stop - start) / n
lst = [start]
while n > 0:
start, n = start + step, n - 1
lst.append(round(start, 2))
return lst
print(rang(1, 8, 10)) # [1.0, 1.7, 2.4, 3.1, 3.8, 4.5, 5.2, 5.9, 6.6, 7.3, 8.0]
找出字典中数值最大的项。
def max_pairs(dic):
if len(dic) == 0:
return dic
max_val = max(map(lambda v: v[1], dic.items()))
return [item for item in dic.items() if item[1] == max_val]
print(max_pairs({'a': -10, 'b': 5, 'c': 3, 'd': 5})) # [('b', 5), ('d', 5)]
找出字典中数值最小的项。
def min_pairs(dic):
if len(dic) == 0:
return []
min_val = min(map(lambda v: v[1], dic.items()))
return [item for item in dic.items() if item[1] == min_val]
print(min_pairs({'a': -10, 'b': 5, 'c': 3, 'd': 5})) # [('a', -10)]
Python 3.5+ 支持的合并语法。
def merge_dict2(dic1, dic2):
return {**dic1, **dic2}
print(merge_dict2({'a': 1, 'b': 2}, {'c': 3})) # {'a': 1, 'b': 2, 'c': 3}
使用 heapq 模块高效查找。
from heapq import nlargest
def topn_dict(d, n):
return nlargest(n, d, key=lambda k: d[k])
print(topn_dict({'a': 10, 'b': 8, 'c': 9, 'd': 10}, 3)) # ['a', 'd', 'c']
直接利用 min 函数。
d = {'a': -10, 'b': 5, 'c': 3, 'd': 5}
print(min(d.items(), key=lambda x: x[1])) # ('a', -10)
检查两个字符串是否包含相同的字符及数量。
from collections import Counter
def anagram(str1, str2):
return Counter(str1) == Counter(str2)
print(anagram('eleven+two', 'twelve+one')) # True
print(anagram('eleven', 'twelve')) # False
遍历目录查找特定扩展名的文件。
import os
def find_file(work_dir, extension='jpg'):
lst = []
for filename in os.listdir(work_dir):
splits = os.path.splitext(filename)
ext = splits[1]
if ext == '.' + extension:
lst.append(filename)
return lst
# find_file('.', 'md') # 返回所有目录下的 md 文件
演示 requests、lxml 与 pandas 的结合使用。
import requests
from lxml import etree
import pandas as pd
import re
url = 'http://www.weather.com.cn/weather1d/101010100.shtml'
try:
with requests.get(url, timeout=10) as res:
content = res.content
html = etree.HTML(content)
location = html.xpath('//*[@id="around"]//a[@target="_blank"]/span/text()')
temperature = html.xpath('//*[@id="around"]/div/ul/li/a/i/text()')
df = pd.DataFrame({'location': location, 'temperature': temperature})
def parse_temp(temp_str):
try:
high = int(re.match(r'(-?[0-9]*?)/-?[0-9]*?°C', temp_str).group(1))
low = int(re.match(r'-?[0-9]*?/(-?[0-9]*?)°C', temp_str).group(1))
return high, low
except:
return None, None
temps = df['temperature'].apply(parse_temp)
df['high'] = [t[0] for t in temps]
df['low'] = [t[1] for t in temps]
print(df.head())
except Exception as e:
print(f"请求失败:{e}")
字符串命名规范转换工具。
import re
def camel(s):
s = re.sub(r"(\s|_|-)+", " ", s).title().replace(" ", "")
return s[0].lower() + s[1:]
def batch_camel(slist):
return [camel(s) for s in slist]
print(batch_camel(['student_id', 'student\tname', 'student-add'])) # ['studentId', 'studentName', 'studentAdd']
使用标准库 turtle 进行图形绘制。
import turtle
def draw_rings():
t = turtle.Turtle()
colors = ['blue', 'black', 'red', 'yellow', 'green']
positions = [(-100, 0), (-50, 0), (0, 0), (50, 0), (100, 0)]
for i, pos in enumerate(positions):
t.penup()
t.goto(pos)
t.pendown()
t.circle(30)
turtle.done()
模拟随机落雪效果。
import turtle
import random
def draw_snowflakes(count=100):
t = turtle.Turtle()
t.speed(0)
for _ in range(count):
x = random.randint(-300, 300)
y = random.randint(-300, 300)
t.penup()
t.goto(x, y)
t.dot(3, 'white')
turtle.done()
使用 wordcloud 库可视化文本数据。
import hashlib
import pandas as pd
from wordcloud import WordCloud
# 假设 geo_data 已加载
# geo_data = pd.read_excel(r"../data/geo_data.xlsx")
# words = ','.join(x for x in geo_data['city'] if x != [])
# wc = WordCloud(
# background_color="green",
# max_words=100,
# font_path='./fonts/simhei.ttf',
# width=500
# )
# x = wc.generate(words)
# x.to_file('../data/geo_data.png')
使用 yield 关键字节省内存。
def fibonacci_gen(n):
a, b = 1, 1
for _ in range(n):
yield a
a, b = b, a + b
print(list(fibonacci_gen(5))) # [1, 1, 2, 3, 5]
惰性计算,适合大数据流处理。
from math import ceil
def divide_iter(lst, n):
if n <= 0:
yield lst
return
i, div = 0, ceil(len(lst) / n)
while i < n:
yield lst[i * div: (i + 1) * div]
i += 1
print(list(divide_iter([1, 2, 3, 4, 5], 2))) # [[1, 2, 3], [4, 5]]
构建简单的神经网络模型。
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
# 生成模拟数据
np.random.seed(42)
data = np.random.random((1000, 100))
labels = np.random.randint(2, size=(1000, 1))
model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(data, labels, epochs=10, batch_size=32, verbose=0)
predictions = model.predict(data)
print(f"预测样本数:{len(predictions)}")
以上整理了 42 个 Python 实用小例子,涵盖了从基础语法到数据分析、机器学习的常见场景。这些代码片段旨在帮助开发者快速解决实际问题或作为学习参考。建议在实际项目中结合具体需求进行调整和优化。持续练习和阅读官方文档是提升编程能力的关键路径。
希望这些内容能为你的 Python 学习之路提供助力。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 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