3小时入门Python——第三十二课列表理解

  |   0 评论   |   0 浏览   |   给我丶鼓励

列表理解是制作新列表的一种方法。它允许您以简洁有效的方式从任何可迭代对象创建列表。请参见下面的基本语法:

# list comprehension syntax
new_list = [x for x in some_iterable]

在这里,您可以看到列表理解是由方括号指定的(就像列表本身一样),在方括号内有一些可迭代对象的 for 循环。在我们的示例中,new_list 将仅包含 some_iterable 对象中的所有元素。上面的代码与下面的代码完全等效,但是,它占用的空间更少,并且工作速度更快!

# the equivalent code
new_list = []
for x in some_iterable:
    new_list.append(x)

您可能想知道为什么既然我们有一个 list() 功能,那么根本就不需要列表理解。显然,列表推导不仅用于将元素从某些可迭代对象复制到列表中,而且还主要用于以某种方式修改它们以创建特定的新列表。在这种情况下,我们首先将列表理解为变量的某些函数。例如,下面的代码显示了如何创建平方数列表。

# squared numbers
numbers = [1, 2, 3]
square_list = [x * x for x in numbers]  # [1, 4, 9]

另外,我们可以使用列表推导将列表的元素从一种数据类型转换为另一种数据类型:

# from string to float
strings = ["8.9", "6.0", "8.1", "7.5"]
floats = [float(num) for num in strings]  # [8.9, 6.0, 8.1, 7.5]

清单理解

修改原始可迭代对象的另一种方法是将 if 语句引入列表理解中。基本语法是这样的:

# list comprehension with condition
new_list = [x for x in some_iterable if condition]

条件语句使您可以过滤原始集合的元素,并且仅使用所需的元素。if 语句在这里是理解语法的一部分。过滤条件不是必不可少的部分,但它可能非常有用。例如,这里用于从另一个列表创建一个奇数列表:

# odd numbers
numbers = [4, 8, 15, 16, 23, 42, 108]
odd_list = [x for x in numbers if x % 2 == 1]  # [15, 23]

您也可以使用标准方法来修改条件。例如,如果您想创建一个以_-tion_结尾的单词列表,则可以这样进行:

# conditions with functions
text = ["function", "is", "a", "synonym", "of", "occupation"]
words_tion = [word for word in text if word.endswith("tion")]  
print(words_tion)  # ["function", "occupation"]

最后,我们可以 else 在列表理解中引入该语句。此处的语法略有不同:[x if condition else y for x in some_iterable]。例如,使用此方法,我们可以为旧列表中的每个负数获取 0 的新列表:

old_list = [8, 13, -7, 4, -9, 2, 10]
new_list = [num if num >= 0 else 0 for num in old_list]
print(new_list)  # [8, 13, 0, 4, 0, 2, 10]

回顾

通常,应谨慎使用列表理解:如果效率提高,则会失去可读性。但是,它是一个非常有用的工具,我们希望您可以在程序中使用它!


标题:3小时入门Python——第三十二课列表理解
作者:给我丶鼓励
地址:https://blog.doiduoyi.com/articles/1594214545969.html

评论

发表评论