Py学习  »  Python

10个超级常用的 Python 技巧!好用到爆!

集智书童 • 1 月前 • 98 次点击  

来源:投稿  作者:Fairy
编辑:学姐

在学习Python编程时,掌握一些实用的小技巧可以大大提升你的编码效率和代码质量。无论你是初学者还是有一定基础的学生,了解一些实用的Python技巧都能帮助你更好地应对编程中的各种挑战。

今天,我们将探索10个高效的Python技巧,这些技巧能够让你的代码更加简洁。掌握这些技巧后,你会发现Python的世界变得更加有趣和高效。让我们一起深入这些实用的技巧,提升你的编程技能,成为更加出色的Python开发者。

unsetunset1. 获取列表中n个最大或最小的元素unsetunset

使用heapq模块,可以帮助我们获取列表中n个最大或最小的元素。

假设你有一个列表 [7, 2, 5, 8, 10, 3],你想找出其中的3个最大元素和2个最小元素。

import heapq

numbers = [7258103]

# 找出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

unsetunset 3. 简化代码(列表解析式)unsetunset

列表解析式(List Comprehension)是一种简洁、高效地创建列表的方式。它允许你用一行代码生成新列表,通常比使用传统的循环更简洁和直观。

生成一个包含 0 到 9 的平方的列表。

# 无条件
squares = [x**2 for x in range(10)]
print(squares)
# 结果
[0149162536496481]

# 待条件
even_squares = [x**2 for x in range(10if x % 2 == 0]
print(even_squares)
# 结果
[04163664]

# 嵌套
matrix = [
    [123],
    [456],
    [789]
]

flattened = [elem for row in matrix for elem in row]
print(flattened)
# 结果
[123456789]

unsetunset4. 合并字典unset unset

{**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个常见的使用场景:

  1. 临时性操作:当函数只需被使用一次或几次,且功能简单时,匿名函数可以减少代码量。
  2. 作为函数参数:常用于高阶函数(如 map filtersorted)中,作为参数传入。
  3. 简单的回调函数:在某些需要简单回调函数的场景下,匿名函数比命名函数更为简洁。

这里我们简单介绍一下它的基本用法。

# 匿名函数:计算两个数的和
add = lambda x, y: x + y

result = add(53)
print(result)  # 输出 8

unsetunset7. 计算元素的累积unsetunset

reduce 是 Python 的 functools模块中的一个函数,用于对序列的所有元素进行累积操作。它通过反复应用一个二元操作函数,将序列缩减为单个值。通常情况下,reduce`和 lambda 函数组合可以使代码更简洁,但要注意代码的可读性。

假如有一个列表[1, 2, 3, 4, 5],我们想要计算列表的累积和。

from functools import reduce

numbers = [12345]
# 使用 lambda 表达式定义二元操作函数:计算两个数的和
result = reduce(lambda x, y: x + y, numbers)

print(result)  # 输出 15

unset unset8. 将同一操作应用到多个元素上unsetunset

map 是 Python 内置函数之一,用于将指定函数应用到可迭代对象的每一个元素上,并返回一个迭代器,该迭代器生成函数处理后的结果。它可以结合 lambda 表达式和多个可迭代对象来实现更复杂的处理逻辑。返回的是一个迭代器,所以通常需要使用 list 或 tuple函数将其转换为可查看的形式。

# 基本用法
# 定义一个函数,将一个数字平方
def square(x):
    return x * x
numbers = [12345]
# 使用 map 将 square 函数应用到 numbers 列表的每一个元素上
result = map(square, numbers)
# 将结果转换为列表并输出
print(list(result))  # 输出 [1, 4, 9, 16, 25]


# 使用 lambda 表达式
numbers = [12345]
result = map(lambda x: x ** 3, numbers)
# 将结果转换为列表并输出
print(list(result))  # 输出 [1, 8, 27, 64, 125]

# 多个可迭代对象
def add(x, y):
    return x + y
numbers1 = [1234]
numbers2 = [5678]
# 使用 map 将 add 函数应用到 numbers1 和 numbers2 列表的每一对元素上
result = map(add, numbers1, numbers2)
# 将结果转换为列表并输出
print(list(result))  # 输出 [6, 8, 10, 12]

unset unset9. 筛选符合特定条件的元素unsetunset

filter 函数用于从可迭代对象中过滤出符合特定条件的元素。它接受两个参数:一个函数和一个可迭代对象。函数应用于可迭代对象的每一个元素,只有当函数返回 True时,元素才会被包含在结果中。它返回一个迭代器,需要通过 list或 tuple 转换为具体的列表或元组来查看结果。可以与 lambda表达式结合使用,以简化条件定义。

# 基本用法
def is_even(x):
    return x % 2 == 0
numbers = [123456]
# 使用 filter 函数将 is_even 函数应用到 numbers 列表中
result = filter(is_even, numbers)
# 将结果转换为列表并输出
print(list(result))  # 输出 [2, 4, 6]

# 使用 lambda 表达式
numbers = [512821153]
# 使用 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. 将二维列表拉伸为一维度列表unset unset

将二维列表(即列表的列表)展平成一维列表是一个常见的操作。

# 使用列表推导式
two_d_list = [[123], [45], [678]]
# 使用列表推导式将二维列表展平成一维列表
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 = [[123], [45], [678]]
# 使用 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/Django开发社区
本文地址:http://www.python88.com/topic/174160
 
98 次点击