如何使用python列表理解(以及何时不使用它们)

下面是关于使用Python的这一惊人特性的所有需要了解的信息,它将在一夜之间提高您的生产率和代码可读性。...

您可能听说过Python的列表理解。也许这甚至是你在没有真正理解的情况下使用的东西。现在是学习的时候了,因为我们将介绍有关Python中列表理解的所有知识。

python-list-comprehension

在开始之前,有必要让自己重新了解数组和列表在Python中是如何工作的,以及如何使用Python字典。

什么是python列表理解(python list comprehension)?

列表理解听起来很复杂,但实际上并不复杂。在Python中,它只是一种根据某些条件快速筛选或细化列表的方法。

它省去了你写几行代码的时间(特别是当你已经在一个循环中的时候),而且它保持了你代码的可读性。

但是,要小心,因为列表理解并不总是答案。很容易忘乎所以,写出难以理解的复杂理解。有时写更多的代码更好,尤其是如果它有助于可读性的话。坚持简单的任务,把代码放在一个单一的职责上。

如何在python中使用列表理解

注意:这些示例都使用python3.6。如果您不确定python3和python2之间的区别,那么请务必阅读我们的Python常见问题解答,我们将在这里讨论这个问题以及更多内容。

考虑复制数组并将数组中的每个字母转换为大写的这段代码。它通过循环数组中的每个项来实现:

letters = ['a', 'b', 'c', 'd']print(letters)upper_letters = []for letter in letters: result = letter.upper() upper_letters.append(result)print(upper_letters)

Learn Python list comprehension

下面是相同的逻辑,除了使用基本的Python列表理解在一行代码中完成之外:

letters = ['a', 'b', 'c', 'd']print(letters)upper_letters = [x.upper() for x in letters]print(upper_letters)

Learn Python list comprehension

如您所见,结果是完全相同的,但是这个过程需要大量的代码而不需要列表理解。

让我们把这个简单的例子分解一下。

本例创建了一个名为letters的列表。它存储小写字母“a”、“b”、“c”和“d”。假设您希望所有这些列表元素都是大写的?在没有列表理解的情况下,您必须创建一个新的列表来存储结果(称为大写字母),循环遍历字母列表中的每个元素,转换每个字母(并将其存储在结果中——可选但良好的做法),然后将大写字母附加到新列表中。多大的工作量啊!

这里的列表理解几乎完全等同于循环选项。它实际上表示“对于字母列表中的每个字母,将它们转换为大写,并将结果作为新列表返回。”

列表理解只能用于列表,并且必须返回新列表。我们再深入一点。

一份理解清单包括三个部分(我们将在下面介绍第三部分)。列表理解必须以方括号([和])开始和结束。这就是它的设计方式,让Python知道您将使用一个列表。

在方括号内,您需要从结果开始。这就是您希望对每个列表元素执行的操作。

在上面的示例中,下面的代码使用upper()方法将每个元素(由变量名x引用)转换为大写,upper()方法是Python核心库的一部分:

[x.upper() # will not run, only half the comprehension at this point

接下来,您需要告诉Python要处理哪个列表,并将每个元素分配给一个变量。这与冗长示例中的for循环完全相同:

for x in letters

每次循环遍历列表时,x的值都将更改为当前元素的值。它将以“a”开头,然后是“b”,依此类推。

如果你把它们放在一起(并把它赋给一个名为upper\u letters的变量),你就完成了:

upper_letters = [x.upper() for x in letters]

现在,大写字母将包含一个大写字母列表,从“a”开始,然后是“B”,依此类推。

python中列表理解的第三部分

正如我们上面提到的,还有第三部分要列出理解。

完成上述两个步骤后,可以包括一个可选条件。这就像使用if语句说“基于这个旧列表,为我创建一个新列表,但只包含符合我的条件的元素”。

下面是它的样子:

ages = [1, 34, 5, 7, 3, 57, 356]print(ages)old_ages = [x for x in ages if x > 10]print(old_ages)

Learn Python list comprehension

本例使用了一个名为ages的新列表。旧表是用一个表集合起来的。末尾的if条件意味着只有满足条件的列表元素才会**到新列表中。在这个例子中,任何年龄大于10岁都是允许的。

何时不使用python列表理解

一旦你掌握了窍门,列表理解是惊人的,但它并不是在任何情况下都有用。当您需要多个条件时,您可能不应该使用它:

old_ages = [x for x in ages if x > 10 and x < 100 and x is not None]

这个代码可以工作,但它开始变得冗长和混乱。类似地,除了一个简单的函数调用以外的任何东西都可能不起作用。在本例中,您将得到一个错误:

letters = ['a', 'b', 'c', 'd', 2]print(letters)upper_letters = [x.upper() for x in letters]print(upper_letters)

Learn Python list comprehension

这是一个非常有效的代码,但由于不能将数字大写,因此无法使用。在这种情况下,较长的循环实际上更可取,因为您可以执行一些异常处理:

letters = ['a', 'b', 'c', 'd', 1]print(letters)upper_letters = []for letter in letters: try: result = letter.upper() upper_letters.append(result) except AttributeError: pass # do nothingprint(upper_letters)

Learn Python list comprehension

开始使用python列表理解

既然您知道Python中的列表理解是多么容易,就没有理由不使用它了。只需记住保持简单,并首先考虑可读性。

也许你会用Python控制Arduino,或者DIY Python网络安全摄像头呢?

  • 发表于 2021-03-24 12:24
  • 阅读 ( 234 )
  • 分类:编程

你可能感兴趣的文章

追加(append)和在python中扩展(extend in python)的区别

...供了几个与列表相关联的内置函数。程序员可以在程序中使用它们。其中两个是,append和extend。本文讨论了append和extend的区别巨蟒append方法主要用于向现有列表中添加一个元素,而extend方法用于向现有列表中添加多个元素。Python...

  • 发布于 2020-10-19 10:35
  • 阅读 ( 231 )

perl公司(perl)和python(python)的区别

...过程编程有助于将程序划分为函数。面向对象编程有助于使用对象对软件或程序进行建模。 Perl是一种解释语言。因此,每一行都由解释器逐个读取。高级语言程序可以被程序员理解,但机器却不能理解。因此,指令应转换成机...

  • 发布于 2020-10-19 17:38
  • 阅读 ( 219 )

红宝石(ruby)和python(python)的区别

...优点是这些语言支持面向对象编程(OOP)。OOP方法有助于使用对象对一个或一组程序进行建模。Ruby和Python的关键区别在于Ruby主要用于web开发,而Python主要用于各种应用程序,包括web开发。Python还常用于科学计算、数据科学应用...

  • 发布于 2020-10-19 17:41
  • 阅读 ( 341 )

如何在python中使用列表理解

... 然而,如果你不知道如何使用它,你可能会生气。如果您不知道在代码中的什么地方应用它,那就更令人沮丧了。在这里,我们将通过一些实际例子向您展示如何在Python中使用列表理解。 ...

  • 发布于 2021-03-11 10:55
  • 阅读 ( 581 )

python字典:如何使用它编写更好的代码

... 在本文中,我们将向您介绍如何使用python字典。 ...

  • 发布于 2021-03-14 05:15
  • 阅读 ( 265 )

数组和列表在python中的工作方式

...数据类型告诉编译器(或者在Python的情况下告诉解释器)如何使用数据。数据结构指定可以执行的操作,并且通常实现特定的规则和规定。 ...

  • 发布于 2021-03-15 17:19
  • 阅读 ( 232 )

帮助您快速学习的10个基本python示例

... 如何声明空dict: ...

  • 发布于 2021-03-16 13:29
  • 阅读 ( 206 )

什么是编码?它是如何工作的?

...,甚至游戏!今天,您将学习它的代码,它的用途,以及如何开始学习自己的代码。 ...

  • 发布于 2021-03-18 05:18
  • 阅读 ( 351 )

揭开这个免费电子书现代蟒蛇!

... 电子书还向您展示了如何: ...

  • 发布于 2021-03-20 06:10
  • 阅读 ( 230 )

你应该知道的5种函数式编程语言

... 如果您感兴趣,请查看我们的指南,了解如何构建一个简单的PHP网站。 ...

  • 发布于 2021-03-20 18:46
  • 阅读 ( 624 )