优雅的Python编程技巧

1. 写在前面

Python最大的优点之一就是语法简洁,本文主要记录常见技巧,不定期更新。:)

个人博客: https://jianpengzhang.github.io/
CSDN博客: http://blog.csdn.net/u011521019
公众号: 滑翔的纸飞机

2. 10 个 Python 技巧

2.1 列表推导(List Comprehensions)

使用循环来创建列表,不如使用列表推导式编写可读代码。

In [3]: numbers = [x for x in range(10)]
In [4]: numbers
Out[4]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

2.2 字典推导 (Dictionary Comprehension)

与 list comprehensions 类似,你也可以以一种紧凑的方式创建字典。

In [5]: squares = {x: x*x for x in range(5)}

In [6]: squares
Out[6]: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

2.3 多重赋值(Multiple Assignment)

在一行中为多个变量赋值。

In [7]: a, b = 10, 20

2.4 数据交换

在不使用临时变量的情况下交换两个变量的值。

In [8]: a, b = b, a

2.5 条件赋值

使用三元条件表达式进行基于条件的简明赋值。

In [11]: value = x if x > 0 else 0

2.6 字符串格式化

使用 f-strings 进行简洁易读的字符串格式化。

In [12]: name = "Alice"
    ...: age = 30
    ...: message = f"My name is {name} and I am {age} years old."

In [13]: message
Out[13]: 'My name is Alice and I am 30 years old.'

2.7 迭代解包

将列表或元组等可迭代元素直接解包到变量中。

In [14]: numbers = [1, 2, 3]
    ...: a, b, c = numbers

另一使用场景:使用星号运算符解包;
有时你想解压缩列表并将元素分配给不同的变量。我们可以使用 Python 解包运算符 (*)。以下是一个列表。我们想得到“boy”的名字,并将其分配给变量“boy”。其余的名字将被分配给变量“girls”。因此,我们将列表中的第一项分配给(从列表中解压)给 boy 变量。然后,我们将星号*添加到变量“girls”中。通过在名称中添加 *,是在告诉 Python,一旦它从列表中解压缩boy的名字,所有其他剩余的名字都必须分配给girls的变量名称。请参阅下面的输出:

In [16]: names = ['John','Mary','Lisa','Rose']
In [17]: boy, *girls = names
In [18]: print(boy)
John
In [19]: print(*girls)
Mary Lisa Rose

如果名字“John”在列表的末尾,我们会把带星号的名字放在开头。见下文:

In [20]: names = ['Mary','Lisa','Rose','Jonh']
In [21]: *girls, boy = names
In [22]: print(*girls)
Mary Lisa Rose
In [23]: print(boy)
Jonh

2.8 Enumerate

对序列进行遍历,同时跟踪索引。

In [16]: my_list=['one','two','three','four','five']

In [17]: for index, value in enumerate(my_list):
    ...:     print(f"Index: {index}, Value: {value}")
    ...: 
Index: 0, Value: one
Index: 1, Value: two
Index: 2, Value: three
Index: 3, Value: four
Index: 4, Value: five

2.9 Zip

有时,在使用列表时,你可能希望将数据类型更改为字典。也就是说,你可能希望将列表合并到字典中。为此,你可能必须使用 zip() 函数和 dict() 函数。zip() 函数接受两个可迭代对象并将元素配对。list1中的第一个元素与list2中的第一个元素配对,第二个元素与另一个第二个元素配对,依此类推。zip() 函数返回元组的迭代器。dict() 函数会将配对的元素转换为键值组合,从而创建一个字典。

示例1:
In [18]: names = ["Alice", "Bob", "Charlie"]
    ...: ages = [25, 30, 22]
    ...: for name, age in zip(names, ages):
    ...:     print(f"Name: {name}, Age: {age}")
    ...: 
Name: Alice, Age: 25
Name: Bob, Age: 30
Name: Charlie, Age: 22

示例2:
In [12]: x = ['name', 'age', 'country']
In [13]: y = ['yoko', 60, 'angola']
In [14]: dict1 = dict(zip(x,y))
In [15]: print(dict1)
{'name': 'yoko', 'age': 60, 'country': 'angola'}

如果列表中的某个元素无法与另一个元素配对,则该元素将被排除在外。假设 list1 有四个元素,list2 有五个元素;list2 中的第五项将被省略。

2.10 字典默认值

使用 collections.defaultdict 为字典键设置默认值。

没有默认值情况:

In [1]: counts['apples'] += 1
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In [1], line 1
----> 1 counts['apples'] += 1

NameError: name 'counts' is not defined

设置默认值:

In [2]: from collections import defaultdict
   ...: counts = defaultdict(int)
   ...: counts["apples"] += 1 # 不需要检查key是否存在

In [3]: counts
Out[3]: defaultdict(int, {'apples': 1})

3. 最后

感谢您花时间阅读文章

关注公众号不迷路:)

你可能感兴趣的:(python,开发语言)