“大道至简”,编程领域也不例外。接触Python多年,最让我惊艳的就是它“用最少代码办大事”的能力——很多复杂任务,一行代码就能搞定。今天就把我整理的26个Python极简技巧分享出来,从日常高频需求到进阶玩法,无论你刚接触Python还是想优化代码,都能有所收获。
日常编程里,很多重复又基础的任务,其实不用写长篇代码。分享20个我常用的“一行解法”,都是实战中验证过的高效方案:
处理数据时,求列表平均值是家常便饭。以前我还会手动循环累加,后来发现Python的sum()
和len()
是“黄金搭档”:
numbers = [1, 2, 3, 4, 5]
average = sum(numbers) / len(numbers)
sum()
负责算总和,len()
获取列表长度,两者相除,平均值秒出。
想把列表里的文字拼成一句话?join()
方法就像“文字粘合剂”,能把列表元素粘成完整字符串,中间还能选“间隔符”:
my_list = ['Hello', 'world']
stringified = ' '.join(my_list)
这里用空格当间隔,最后会得到“Hello world”,换逗号、句号也一样方便。
找列表里的最大数,不用逐个对比。max()
函数就像“放大镜”,直接定位最大值:
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
max_value = max(numbers)
不管列表多长,一行就能揪出最大的那个。
验证输入是否为纯数字时,all()
搭配生成器表达式特别好用,就像“逐个安检”:
s = "12345"
is_all_digits = all(c.isdigit() for c in s)
每个字符都要过isdigit()
的“检查”,全通过才返回True。
想把字符串倒过来?切片[::-1]
就是“倒带键”,轻轻一用就能反转:
my_string = "hello"
reversed_string = my_string[::-1]
“hello”瞬间变成“olleh”,简单到不用记复杂语法。
给列表里每个数算平方,不用循环写好几行。列表推导式像“批量处理器”,一行搞定:
numbers = [1, 2, 3]
squared = [n**2 for n in numbers]
逐个取元素算平方,最后自动拼成新列表,清晰又高效。
判断素数就像“给数字体检”,要检查2到根号n之间有没有“因子病菌”。all()
就是“体检仪”:
def is_prime(n):
return all(n % i for i in range(2, int(n**0.5) + 1)) and n > 1
只要2到根号n之间没有能整除n的数,且n大于1,就是素数。
字符串里有重复字符?set()
是“去重神器”,再搭配sorted()
和join()
,去重又排序:
my_string = "hello"
unique_chars = ''.join(sorted(set(my_string)))
set()
先去掉重复,sorted()
按顺序排好,join()
再拼成字符串,结果又干净又整齐。
想知道某个字在句子里出现多少次?count()
方法就像“计数器”,直接报数:
text = "hello world"
count = text.count('o')
这里查“o”的次数,改其他字符也一样,简单直接。
读文件最怕忘了关,Python的with
语句像“贴心管家”,自动处理关闭操作:
with open('example.txt', 'r') as file:
lines = file.readlines()
readlines()
还会把所有行装进列表,后续处理超方便。
以前我还手动写快排算法,后来发现Python自带的sorted()
就是“排序快手”:
def quick_sort(lst):
return sorted(lst)
虽然不算“纯一行内”,但调用内置函数,比自己写的更稳定高效。
斐波那契数列是编程常练的题,用lambda
函数能写得很简洁:
fibonacci = lambda n: [0, 1] + [fibonacci(i - 1)[-1] + fibonacci(i - 2)[-1] for i in range(2, n)]
注意这是教学用的简洁写法,效率不算高,处理少量数据没问题。
想把字典的键值对反过来?字典推导式像“交换器”,一行就能换:
my_dict = {'a': 1, 'b': 2}
swapped = {v: k for k, v in my_dict.items()}
逐个取键值对,把值当新键、键当新值,超直观。
找两个集合的共同元素,不用循环比对。集合的&
运算符像“交集探测器”:
set1 = {1, 2, 3}
set2 = {2, 3, 4}
intersection = set1 & set2
直接返回共同元素,比手动筛选快多了。
想把“12345”拆成1,2,3,4,5?map()
和list()
是“转换搭档”:
s = "12345"
int_list = list(map(int, s))
map(int, s)
把每个字符转成整数,list()
再拼成列表,一步到位。
需要随机数时,random
模块的randint()
就是“随机发生器”:
import random
random_number = random.randint(1, 100)
导入模块后,一行就能生成1到100之间的随机整数。
想随机混排字符串?shuffle()
方法像“洗牌器”:
from random import shuffle
s = "hello"
shuffled = ''.join(shuffle(list(s), random.random))
先把字符串转成列表(字符串不能直接打乱),打乱后再用join()
拼回去。
计算时间差后,秒数转时分秒是常见需求。divmod()
函数像“时间拆分器”:
seconds = 3661
hours, remainder = divmod(seconds, 3600)
minutes, seconds = divmod(remainder, 60)
time_format = f"{hours}:{minutes}:{seconds}"
先拆出小时,再拆剩余秒数成分钟和秒,最后格式化输出。
闰年判断有固定规则,用逻辑运算符组合条件,一行就能判断:
year = 2020
is_leap = year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
符合“能被4整除但不能被100整除,或能被400整除”,就是闰年。
遇到[1,2,3,4]这样的嵌套列表,想拆成1,2,3,4?双层列表推导式像“拆盒器”:
nested_list = [[1, 2], [3, 4, 5], [6]]
flattened = [item for sublist in nested_list for item in sublist]
先遍历外层列表,再拆内层列表的元素,自动拼成扁平列表。
掌握了日常技巧后,再学几个进阶玩法,能让代码更优雅、效率更高。这6个是我在项目里常用的,分享给大家:
处理大量数据时,串行计算像“排队结账”,慢得着急。concurrent.futures
模块能实现“多窗口结账”:
from concurrent.futures import ThreadPoolExecutor
def square(n):
return n ** 2
numbers = [1, 2, 3, 4]
with ThreadPoolExecutor() as executor:
results = list(executor.map(square, numbers))
用线程池并行计算每个元素的平方,数据量大时能省不少时间。
装饰器是Python的“功能插件”,不用改原函数代码,就能加新功能:
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Something is happening before the function is called.")
result = func(*args, **kwargs)
print("Something is happening after the function is called.")
return result
return wrapper
@my_decorator
def say_hello(name):
return f"Hello, {name}!"
print(say_hello("World"))
比如给函数加日志、计时功能,用装饰器特别方便,还能复用。
处理大数据时,列表会占很多内存。生成器表达式像“按需供货”,用多少生成多少:
data = (x for x in range(1000000) if x % 2 == 0)
for even_number in data:
print(even_number)
括号代替中括号,不一次性存所有数据,内存压力小很多。
代码难免出错,优雅的错误处理能让程序更稳。用try-except
像“安全网”:
result = None
try:
result = 10 / 0
except ZeroDivisionError:
result = "Can't divide by zero."
print(result)
就算遇到除以零的错误,程序也不会崩溃,还能返回友好提示。
筛选数据时,列表推导式加条件像“带过滤功能的处理器”:
numbers = [1, 2, 3, 4, 5]
even_numbers = [x for x in numbers if x % 2 == 0]
一行就能筛选出偶数,比写for
循环加if
判断简洁多了。
想让对象能被for
循环遍历?自定义迭代器像“定制循环规则”:
class CountDown:
def __init__(self, start):
self.start = start
def __iter__(self):
return self
def __next__(self):
if self.start <= 0:
raise StopIteration
self.start -= 1
return self.start + 1
for number in CountDown(5):
print(number)
比如这个倒计时迭代器,能从指定数字倒着数,理解迭代器协议的好例子。
Python的魅力就在于——它不追求复杂的语法,而是用简洁的方式解决问题,这也是“极简美学”的体现。
希望这些技巧能帮你少走弯路,无论是处理日常任务,还是优化进阶代码,都能更轻松。慢慢练习,你也能写出简洁又高效的Python代码~
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。