一行代码搞定 5 个 Python 技巧。新手 vs 专业人士
Python 以其简洁易用而闻名。这得益于其代码的紧凑性。同时,这种简洁性也隐藏了复杂的程序逻辑。在本文中,我们将探讨 5 个用于处理序列的“语法糖”示例,这些示例利用编程语言的内置结构,让您能够更轻松地编写代码。
回想一下,序列被称为迭代数据结构,或者简称为元素数组。在 Python 中,最常用的序列包括列表 (list)、字符串 (str)、元组 (tuple)、字典 (dict) 或集合 (set)。
使用列表推导在一行中创建列表
假设任务是创建一个列表,其元素是整数的平方。编程初学者会这样做:
squares = []
for x in range(10):
squares.append(x**2)
因此:
result
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
注意,range 是从 0 到 10(不含)的数字序列,而 "**" 是幂运算符。现在,让我们像专业 Python 开发人员一样,使用列表推导式构造:
squares = [x**2 for x in range(10)]
结果是一样的,而且代码变得更高效
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
列表推导式可用于复杂的(嵌套的)循环。例如,让我们像初学者一样,从两个列表中创建元素对:
first = ['a1', 'a2']; second = ['b1', 'b2']
result = []
for i in first:
for j in second :
pair = (i, j)
result.append(pair)
现在是一名真正的 Python 开发人员,水平不错
result = [(i,j) for i in first for j in second]
这就是使用列表推导式可以将创建列表的过程从 5 行缩短到 1 行的方法。任何程序员都会在你的代码中看到真正有能力的 Python 开发人员的功劳
使用字典推导式创建字典
你需要创建一个字典,其值对应于键的平方。初学者的方法需要创建一个空字典,并在下一行创建一个循环,逐个显示键和值:
result = {}
for x in range(10):
result[x] = x**2
结果……
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
是的,我们完成了任务。我们是程序员。但真正的 Python 专业人士只会嘲笑你。
他会向你展示魔术
result = {x: x**2 for x in range(10)}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
注意,x 后面有一个冒号,用于分隔键和值。与列表推导式类似,字典推导式也可用于嵌套循环。希望您注意到,列表推导式和字典推导式中的括号有所不同。
从列表中删除重复项
列表中存在重复项,而您只需要唯一值。初学者会怎么做?他肯定会创建一个新列表,并在循环中安排检查元素是否符合新列表。时间复杂度为 O(N²)。
fruits = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
new = []
for fruit in fruits:
if fruit not in new:
new.append(fruit)
他会得到他的结果
['banana', 'apple', 'pear', 'orange']
如你所见,苹果和橙子不再重复。在第五行,我们的新成员检查新列表中是否存在某个元素:如果存在,则添加,否则忽略。我们这位精通集合的专业人士会再次给我们带来惊喜,他只需一行代码就能给出 O(N) 时间复杂度的解决方案。
# List instead of set
fruits = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
# Actually make `new` a list
new = list(set(fruits))
['banana', 'apple', 'pear', 'orange']
集合是一种数据结构,其中每个元素都是唯一的。因此,当你需要排除重复数据时,可以使用集合
感谢kbauer、ruudvanderham和jackm767对本文的有益补充。您可以在评论中阅读更多相关信息。
重要通知!
集合不包含重复元素;
集合的元素是不可变的(它们不能被改变),但是集合本身是可变的,并且可以被改变;
由于元素未编入索引,因此集合不支持任何切片和索引操作。
拆开清单上的物品
要从序列中取出一个元素,你需要使用该元素的索引,对吗?在某些情况下,这是正确的,但 Python 允许你为每个元素分配一个自己的变量。
x, y = (15, 5)
x
15
y
5
fruit, num, date = ['apple', 5,(2021, 11, 7)]
date
(2021, 11, 7)
Python 中的列表切片
在上例中,我们解压了列表中的每一项。如果需要提取列表下的内容怎么办?例如,有一个包含 5 个元素的序列,您只需提取其中 3 个即可。Python 也提供了此功能:
x = [1, 2, 3, 4, 5]
result = x[:3]
result
[1, 2, 3]
更详细的语法如下:
sequence[start:stop:step]
如果要从零个元素开始剪切,则可以省略 START;如果要剪切到末尾,则可以省略 END;如果默认步骤为 1,则可以省略 STEP
例如:
x = [10, 5, 13, 4, 12, 43, 7, 8]
result = x[1:6:2]
result
[5, 4, 43]
现在,了解了 Python 中的语法糖以及如何有效地使用它,你就可以安全地被称为一名称职的 Python 开发人员
如果您喜欢它并且学到了新的东西,请把它放在心上!
您还可以关注我以接收有关新的有趣文章的通知。
常问问题
我是一个初学者,请问应该如何学习Python?
请查看以下系列:
您能指导我吗?
我当然准备好参加培训了。最大的困难是英语不是我的母语,需要通过翻译来沟通。
您愿意与我们的组织合作吗?
如果您有有趣的想法,我们很乐意邀请您从我们机构投稿。请在下方私信或社交网络上留言。
如果您有有趣的项目并且需要后端开发人员,那么您可以通过邮件或在 discord 中联系我进行合作
连接到我
Discord:vadimkolobanov#5875
文章来源:https://dev.to/abstract/5-python-tricks-in-one-line-beginner-vs-professional-5b0j