如果你正在学习Python,那么你需要的话可以,点击这里👉Python重磅福利:入门&进阶全套学习资料、电子书、软件包、项目源码等等免费分享!
在学习Python编程时,掌握一些实用的小技巧可以大大提升你的编码效率和代码质量。无论你是初学者还是有一定基础的学生,了解一些实用的Python技巧都能帮助你更好地应对编程中的各种挑战。
今天,我们将探索10个高效的Python技巧,这些技巧能够让你的代码更加简洁。掌握这些技巧后,你会发现Python的世界变得更加有趣和高效。让我们一起深入这些实用的技巧,提升你的编程技能,成为更加出色的Python开发者。
unsetunset1. 获取列表中n个最大或最小的元素unsetunset
使用heapq模块,可以帮助我们获取列表中n个最大或最小的元素。
假设你有一个列表 [7, 2, 5, 8, 10, 3]
,你想找出其中的3个最大元素和2个最小元素。
import heapq
numbers = [7, 2, 5, 8, 10, 3]
# 找出3个最大元素
largest_three = heapq.nlargest(3, numbers)
print("3个最大元素:", largest_three) # 输出: [10, 8, 7]
# 找出2个最小元素
smallest_two = heapq.nsmallest(2, numbers)
print("2个最小元素:", smallest_two) # 输出: [2, 3]
unsetunset2. 获取列表中每个元素及其对应下标unsetunset
使用enumerate函数,可以帮助我们获取列表中每个元素及其对应下标。当然,不仅仅是列表,对于其他可迭代对象时非常有用,这在需要同时访问元素和其索引的场景中尤其方便。
假设我们有一个列表 fruits
,我们想要打印每个水果及其对应的下标。使用 enumerate
可以很简单地实现这一目标。
fruits = ['apple', 'banana', 'cherry', 'date']
# 使用 enumerate 获取下标和元素
for index, fruit in enumerate(fruits):
print(f"索引: {index}, 水果: {fruit}")
# 结果
索引: 1, 水果: apple
索引: 2, 水果: banana
索引: 3, 水果: cherry
索引: 4, 水果: date
unsetunset3. 简化代码(列表解析式)unsetunset
列表解析式(List Comprehension)是一种简洁、高效地创建列表的方式。它允许你用一行代码生成新列表,通常比使用传统的循环更简洁和直观。
生成一个包含 0 到 9 的平方的列表。
# 无条件
squares = [x**2 for x in range(10)]
print(squares)
# 结果
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 待条件
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)
# 结果
[0, 4, 16, 36, 64]
# 嵌套
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
flattened = [elem for row in matrix for elem in row]
print(flattened)
# 结果
[1, 2, 3, 4, 5, 6, 7, 8, 9]
unsetunset4. 合并字典unsetunset
{**dictionary_one, **dictionary_two}
语法是 Python 3.5 引入的字典解包功能,用于合并字典。这个语法将两个字典合并为一个新字典,如果存在重复的键,后面的字典的值会覆盖前面的字典的值。
# 基本合并
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
merged = {**dict1, **dict2}
print(merged)
# 结果
{'a': 1, 'b': 3, 'c': 4}
# 合并多个字典
dict1 = {'a': 1}
dict2 = {'b': 2}
dict3 = {'c': 3}
merged = {**dict1, **dict2, **dict3}
print(merged)
# 结果
{'a': 1, 'b': 2, 'c': 3}
unsetunset5. 三元表达式unsetunset
三元表达式(也称为条件表达式)是一种简洁的条件语句写法,用于在一行代码中根据条件选择一个值。Python 的三元表达式的基本语法是:
value_if_true if condition else value_if_false
<条件为真的结果> if <条件判断> else <条件为假的结果>
假如我们有这样一个if...else...条件判断语句:
age = 20
if age >= 18:
status = 'Adult'
else:
status = 'Minor'
我们可以利用三元表达式,简化我们的代码。
age = 20
status = 'Adult' if age >= 18 else 'Minor'
unsetunset6. 匿名函数unsetunset
匿名函数(也称为 lambda 函数)是没有名字的函数,通常用于短小、简单的操作。Python 使用 lambda
关键字来创建匿名函数。匿名函数的语法是:
lambda arguments: expression
它有3个常见的使用场景:
-
临时性操作:当函数只需被使用一次或几次,且功能简单时,匿名函数可以减少代码量。
-
作为函数参数:常用于高阶函数(如
map
、filter
、sorted
)中,作为参数传入。 -
简单的回调函数:在某些需要简单回调函数的场景下,匿名函数比命名函数更为简洁。
这里我们简单介绍一下它的基本用法。
# 匿名函数:计算两个数的和
add = lambda x, y: x + y
result = add(5, 3)
print(result) # 输出 8
unsetunset7. 计算元素的累积unsetunset
reduce 是 Python 的 functools模块中的一个函数,用于对序列的所有元素进行累积操作。它通过反复应用一个二元操作函数,将序列缩减为单个值。通常情况下,reduce`和 lambda 函数组合可以使代码更简洁,但要注意代码的可读性。
假如有一个列表[1, 2, 3, 4, 5],我们想要计算列表的累积和。
from functools import reduce
numbers = [1, 2, 3, 4, 5]
# 使用 lambda 表达式定义二元操作函数:计算两个数的和
result = reduce(lambda x, y: x + y, numbers)
print(result) # 输出 15
unsetunset8. 将同一操作应用到多个元素上unsetunset
map 是 Python 内置函数之一,用于将指定函数应用到可迭代对象的每一个元素上,并返回一个迭代器,该迭代器生成函数处理后的结果。它可以结合 lambda 表达式和多个可迭代对象来实现更复杂的处理逻辑。返回的是一个迭代器,所以通常需要使用 list 或 tuple函数将其转换为可查看的形式。
# 基本用法
# 定义一个函数,将一个数字平方
def square(x):
return x * x
numbers = [1, 2, 3, 4, 5]
# 使用 map 将 square 函数应用到 numbers 列表的每一个元素上
result = map(square, numbers)
# 将结果转换为列表并输出
print(list(result)) # 输出 [1, 4, 9, 16, 25]
# 使用 lambda 表达式
numbers = [1, 2, 3, 4, 5]
result = map(lambda x: x ** 3, numbers)
# 将结果转换为列表并输出
print(list(result)) # 输出 [1, 8, 27, 64, 125]
# 多个可迭代对象
def add(x, y):
return x + y
numbers1 = [1, 2, 3, 4]
numbers2 = [5, 6, 7, 8]
# 使用 map 将 add 函数应用到 numbers1 和 numbers2 列表的每一对元素上
result = map(add, numbers1, numbers2)
# 将结果转换为列表并输出
print(list(result)) # 输出 [6, 8, 10, 12]
unsetunset9. 筛选符合特定条件的元素unsetunset
filter 函数用于从可迭代对象中过滤出符合特定条件的元素。它接受两个参数:一个函数和一个可迭代对象。函数应用于可迭代对象的每一个元素,只有当函数返回 True时,元素才会被包含在结果中。它返回一个迭代器,需要通过 list或 tuple 转换为具体的列表或元组来查看结果。可以与 lambda表达式结合使用,以简化条件定义。
# 基本用法
def is_even(x):
return x % 2 == 0
numbers = [1, 2, 3, 4, 5, 6]
# 使用 filter 函数将 is_even 函数应用到 numbers 列表中
result = filter(is_even, numbers)
# 将结果转换为列表并输出
print(list(result)) # 输出 [2, 4, 6]
# 使用 lambda 表达式
numbers = [5, 12, 8, 21, 15, 3]
# 使用 filter 函数和 lambda 表达式
result = filter(lambda x: x > 10, numbers)
# 将结果转换为列表并输出
print(list(result)) # 输出 [12, 21, 15]
# 过滤字符串列表
def long_string(s):
return len(s) > 3
words = ["cat", "dog", "elephant", "ant"]
# 使用 filter 函数过滤出长度大于 3 的字符串
result = filter(long_string, words)
# 将结果转换为列表并输出
print(list(result)) # 输出 ['elephant']
unsetunset10. 将二维列表拉伸为一维度列表unsetunset
将二维列表(即列表的列表)展平成一维列表是一个常见的操作。
# 使用列表推导式
two_d_list = [[1, 2, 3], [4, 5], [6, 7, 8]]
# 使用列表推导式将二维列表展平成一维列表
one_d_list = [item for sublist in two_d_list for item in sublist]
print(one_d_list) # 输出 [1, 2, 3, 4, 5, 6, 7, 8]
# 使用 itertools.chain
import itertools
two_d_list = [[1, 2, 3], [4, 5], [6, 7, 8]]
# 使用 itertools.chain 将二维列表展平成一维列表
one_d_list = list(itertools.chain.from_iterable(two_d_list))
print(one_d_list) # 输出 [1, 2, 3, 4, 5, 6, 7, 8]
如果你正在学习Python,那么你需要的话可以,点击这里👉Python重磅福利:入门&进阶全套学习资料、电子书、软件包、项目源码等等免费分享!或扫描下方CSDN官方微信二维码获娶Python入门&进阶全套学习资料、电子书、软件包、项目源码