一行代码搞定 5 个 Python 技巧。新手 vs 专业人士

2025-05-25

一行代码搞定 5 个 Python 技巧。新手 vs 专业人士

照片由AltumCodeUnsplash上拍摄

Python 以其简洁易用而闻名。这得益于其代码的紧凑性。同时,这种简洁性也隐藏了复杂的程序逻辑。在本文中,我们将探讨 5 个用于处理序列的“语法糖”示例,这些示例利用编程语言的内置结构,让您能够更轻松地编写代码。

回想一下,序列被称为迭代数据结构,或者简称为元素数组。在 Python 中,最常用的序列包括列表 (list)、字符串 (str)、元组 (tuple)、字典 (dict) 或集合 (set)。

使用列表推导在一行中创建列表

假设任务是创建一个列表,其元素是整数的平方。编程初学者会这样做:

squares = []
for x in range(10):
    squares.append(x**2)
Enter fullscreen mode Exit fullscreen mode

因此:

result
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Enter fullscreen mode Exit fullscreen mode

注意,range 是从 0 到 10(不含)的数字序列,而 "**" 是幂运算符。现在,让我们像专业 Python 开发人员一样,使用列表推导式构造:

squares = [x**2 for x in range(10)]
Enter fullscreen mode Exit fullscreen mode

结果是一样的,而且代码变得更高效

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Enter fullscreen mode Exit fullscreen mode

列表推导式可用于复杂的(嵌套的)循环。例如,让我们像初学者一样,从两个列表中创建元素对:


first = ['a1', 'a2']; second = ['b1', 'b2']
result = []
for i in first:
    for j in second :
        pair = (i, j)
        result.append(pair)

Enter fullscreen mode Exit fullscreen mode

现在是一名真正的 Python 开发人员,水平不错


result = [(i,j) for i in first for j in second]

Enter fullscreen mode Exit fullscreen mode

这就是使用列表推导式可以将创建列表的过程从 5 行缩短到 1 行的方法。任何程序员都会在你的代码中看到真正有能力的 Python 开发人员的功劳

使用字典推导式创建字典

你需要创建一个字典,其值对应于键的平方。初学者的方法需要创建一个空字典,并在下一行创建一个循环,逐个显示键和值:


result = {}
for x in range(10):
   result[x] = x**2

Enter fullscreen mode Exit fullscreen mode

结果……

{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

Enter fullscreen mode Exit fullscreen mode

是的,我们完成了任务。我们是程序员。但真正的 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}
Enter fullscreen mode Exit fullscreen mode

注意,x 后面有一个冒号,用于分隔键和值。与列表推导式类似,字典推导式也可用于嵌套循环。希望您注意到,列表推导式和字典推导式中的括号有所不同。

从列表中删除重复项

列表中存在重复项,而您只需要唯一值。初学者会怎么做?他肯定会创建一个新列表,并在循环中安排检查元素是否符合新列表。时间复杂度为 O(N²)。


fruits = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
new = []
for fruit in fruits:
    if fruit not in new:
        new.append(fruit)

Enter fullscreen mode Exit fullscreen mode

他会得到他的结果

['banana', 'apple', 'pear', 'orange']
Enter fullscreen mode Exit fullscreen mode

如你所见,苹果和橙子不再重复。在第五行,我们的新成员检查新列表中是否存在某个元素:如果存在,则添加,否则忽略。我们这位精通集合的专业人士会再次给我们带来惊喜,他只需一行代码就能给出 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']
Enter fullscreen mode Exit fullscreen mode

集合是一种数据结构,其中每个元素都是唯一的。因此,当你需要排除重复数据时,可以使用集合

感谢kbauerruudvanderhamjackm767对本文的有益补充。您可以在评论中阅读更多相关信息。

重要通知!

集合不包含重复元素;

集合的元素是不可变的(它们不能被改变),但是集合本身是可变的,并且可以被改变;

由于元素未编入索引,因此集合不支持任何切片和索引操作。

拆开清单上的物品

要从序列中取出一个元素,你需要使用该元素的索引,对吗?在某些情况下,这是正确的,但 Python 允许你为每个元素分配一个自己的变量。

x, y = (15, 5)

x
15

y
5

fruit, num, date = ['apple', 5,(2021, 11, 7)]

date
(2021, 11, 7)
Enter fullscreen mode Exit fullscreen mode

Python 中的列表切片

在上例中,我们解压了列表中的每一项。如果需要提取列表下的内容怎么办?例如,有一个包含 5 个元素的序列,您只需提取其中 3 个即可。Python 也提供了此功能:

x = [1, 2, 3, 4, 5]
result = x[:3]

result
[1, 2, 3]
Enter fullscreen mode Exit fullscreen mode

更详细的语法如下:

sequence[start:stop:step]
Enter fullscreen mode Exit fullscreen mode

如果要从零个元素开始剪切,则可以省略 START;如果要剪切到末尾,则可以省略 END;如果默认步骤为 1,则可以省略 STEP

例如:


x = [10, 5, 13, 4, 12, 43, 7, 8]
result = x[1:6:2]
result
[5, 4, 43]
Enter fullscreen mode Exit fullscreen mode

现在,了解了 Python 中的语法糖以及如何有效地使用它,你就可以安全地被称为一名称职的 Python 开发人员

如果您喜欢它并且学到了新的东西,请把它放在心上!

您还可以关注以接收有关新的有趣文章的通知。

常问问题

我是一个初学者,请问应该如何学习Python?

请查看以下系列:


循序渐进学习 Python并达到初级
水平

您能指导我吗?

我当然准备好参加培训了。最大的困难是英语不是我的母语,需要通过翻译来沟通。

您愿意与我们的组织合作吗?

如果您有有趣的想法,我们很乐意邀请​​您从我们机构投稿。请在下方私信或社交网络上留言。

如果您有有趣的项目并且需要后端开发人员,那么您可以通过邮件或在 discord 中联系我进行合作

连接到我

在 Face 上给我写信...哦...Meta

我的推特

Discord:vadimkolobanov#5875

文章来源:https://dev.to/abstract/5-python-tricks-in-one-line-beginner-vs-professional-5b0j
PREV
利用代码赚钱的 6 种方法
NEXT
面试中提到的 JS Polyfill