Python最大的优点之一就是语法简洁,本文主要记录常见技巧,不定期更新。:)
个人博客: https://jianpengzhang.github.io/
CSDN博客: http://blog.csdn.net/u011521019
公众号: 滑翔的纸飞机
使用循环来创建列表,不如使用列表推导式编写可读代码。
In [3]: numbers = [x for x in range(10)]
In [4]: numbers
Out[4]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
与 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}
在一行中为多个变量赋值。
In [7]: a, b = 10, 20
在不使用临时变量的情况下交换两个变量的值。
In [8]: a, b = b, a
使用三元条件表达式进行基于条件的简明赋值。
In [11]: value = x if x > 0 else 0
使用 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.'
将列表或元组等可迭代元素直接解包到变量中。
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
对序列进行遍历,同时跟踪索引。
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
有时,在使用列表时,你可能希望将数据类型更改为字典。也就是说,你可能希望将列表合并到字典中。为此,你可能必须使用 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 中的第五项将被省略。
使用 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})