全文共 5118 字,预计学习时长 15 分钟
来源:Pexels
越来越多的人开始学习Python,它已经成为最流行的编程语言之一,这几乎发生在所有领域。 比如网络开发、科学计算,当然还有人工智能。
无论想用python干什么,都绕不开学习Python的数据结构、变量和函数声明、条件语句、控制流以及其他基本概念。
一个重要的“Pythonic”特性是列表理解——这是一种创建列表的简洁方式,却令许多初学者感到困惑。
听说过,但不知道是什么?
没关系,本文提供入门级Python列表理解学习。为了更直观,文中
列出了关于列表理解应该知道的九件事,包括语法和各种用例。
1.基本语法
最基本的列表理解有以下语法。
如前所述,做某些事用它会很方便,比如创建列表。扩展形式通常表示为for循环,其中iterable的每个项都运行表达式中指定的某些操作。
# list comprehension [expression for item in iterable]# expanded form for item in iterable: expression
2.创建列表
毋庸置疑,最流行的用法是简洁地创建一个列表。
假设不知道什么是列表理解,在创建一个列表时,可能会做如下的操作。首先声明一个空列表。然后在for循环中,将每个项目附加到列表中。
>>> pets = ( bird , snake , dog , turtle , cat , hamster ) >>> uppercased_pets = [] >>>for pet in pets: ... uppercased_pets.append(pet.upper()) ... >>> uppercased_pets [ BIRD , SNAKE , DOG , TURTLE , CAT , HAMSTER ]
view raw pets.py hosted with ❤ by GitHub
正如在基本语法部分中提到的,可以将for循环语句“压缩”到一行中——即使用只包含一行代码的列表理解,我们可以通过迭代原始列表来方便地创建一个列表。
>>> pets = ( bird , snake , dog , turtle , cat , hamster ) >>> uppercased_pets = [pet.upper() for pet in pets] >>> uppercased_pets [ BIRD , SNAKE , DOG , TURTLE , CAT , HAMSTER ]
3.过滤条件语句
来源:Pexels
有时,使用列表理解来创建列表时,不想包含现有列表中的所有项目。
在这种情况下,需要一个条件语句来过滤掉现有列表中不符合特定条件的项目。相应的列表理解有以下语法。
# list comprehension with a conditional statement [expression for item in iterable if some_condition] # expanded form for item in iterable: if some_condition: expression
view raw list.py hosted with ❤ by GitHub
下面是以上用法的例子:
>>> primes = [2, 3, 5,7, 11, 13, 17, 19, 23, 29] >>> squared_primes = [x*x for x in primes if x%10 == 3] >>> squared_primes [9, 169, 529]
如果有更复杂的条件评估,甚至可以使用函数。
>>>defhas_four_legs(pet): ... return pet in ( pig , dog , turtle , hamster , cat ) ... >>> pets = ( bird , snake , dog , turtle , cat , hamster ) >>> four_legs_pets = [pet.capitalize() for pet in pets ifhas_four_legs(pet)] >>> four_legs_pets [ Dog , Turtle , Cat , Hamster ]
view raw has_four_legs.py hosted with ❤ by GitHub
4.条件赋值
有时,不想从原始列表中过滤掉项目。相反,希望通过评估条件确定使用哪个表达式。下面给出的是语法及其用法,语法也进行了相应的解释。
# basic syntax [expression0 if some_condition else expression1 for item in iterable] # syntax explained: compared to the list comprehension s basic syntax: [expression for item in iterable], we can thin about that (expression0 if some_condition else expression1) is a whole part that constitutes the expression in the general format >>> max_value =10 >>> numbers = (7, 9, 11, 4, 3, 2, 12) >>> ceiling_numbers0 = [number if number <= max_value else max_value for number in numbers] >>> ceiling_numbers0 [7, 9, 10, 4, 3, 2, 10] >>> ceiling_numbers1 = [(number if number <= max_value else max_value) for number in numbers] >>> ceiling_numbers1 [7, 9, 10, 4, 3, 2, 10]
view raw syntax.py hosted with ❤ by GitHub
5.替换map()
在某些情况下,可能会看到人们使用map()创建列表。具体来说,map()函数具有以下语法及其基本用法示例。
需要注意的是map()函数返回可迭代对象,因此可以使用list()函数从这个可迭代对象生成一个列表。
# map() returns an iterator object map(function, iterable) >>> pets = ( bird , snake , dog , turtle , cat , hamster ) >>> uppercased_pets =list(map(str.upper, pets)) >>> uppercased_pets [ BIRD , SNAKE , DOG , TURTLE , CAT , HAMSTER ]
view raw map.py hosted with ❤ by GitHub
如前所示,可以用列表理解来替换map()函数。
>>> pets = ( bird , snake , dog , turtle , cat , hamster ) >>> uppercased_pets = [pet.upper() for pet in pets] >>> uppercased_pets [ BIRD , SNAKE , DOG , TURTLE , CAT , HAMSTER ]
6.嵌套列表理解
来源:Pexels
假设下面的代码片段中有一个元组,若想要创建一个新的条目列表,使得这些条目是元组中所有数字的平方。
在这种情况下,可以使用嵌套列表理解,其语法如下所示。
# basic syntax of the nested list comprehensions [expression for sublist in outer_list for item in sublist] # expanded form for sublist in outer_list: for item in sublist: expression >>> nested_numbers = ((1, 4, 7, 8), (2, 3, 5)) >>> squares = [x*x for numbers in nested_numbers for x in numbers] >>> squares [1, 16, 49, 64, 4, 9, 25]
view raw nested.list.py hosted with ❤ by GitHub
虽然在技术上嵌套列表理解可以有多个层次,但是为保证可读性,不推荐两个以上的层次。
7.使用Walrus运算符
Python 3.8中的一个新特性是引入了walrus运算符(:=),用于赋值表达式。
假设从字母列表中抽取十次,创建的列表将只包括这些图中的元音。下文展示如何在列表理解中使用walrus操作符。
具体来说,在下面的例子中,评估从字母中抽取的随机字母是否是元音,如果是,它将被划分为列表理解表达式可以访问的字母。
>>> letters =list( this is to produce a list of letters ) >>> letters [ t , h , i , s , , i , s , , t , o , , p , r , o , d , u , c , e , , a , , l , i , s , t , , o , f , , l , e , t , t , e , r , s ] >>>import random >>> vowels = [letter.upper() for _ inrange(0, 10) if (letter := random.choice(letters)) inlist( aeoui )] >>> vowels [ I , O , O , O , O ]
view raw letters.py hosted with ❤ by GitHub
8.集合理解
虽然很多人都知道列表理解,但创建集合时也可以使用理解。基本语法及其用法如下所示。
一个主要的区别是我们用花括号代替方括号。当然,根据设计,集合中的元素不会有重复,这与允许重复的列表相反。
请注意,也可以在集合理解中使用条件陈述。
# syntax for set comprehension {expression for item in iterable} >>> numbers = (1, 34, 5, 8, 10, 12, 3, 90, 70, 70, 90) >>> unique_even_numbers = {number for number in numbers if number%2==0} >>> unique_even_numbers {34, 70, 8, 10, 12, 90}
view raw set.comprehension.py hosted with ❤ by GitHub
9.字典理解
来源:Pexels
知晓了列表和集合理解,对Python也有字典理解就不会感到惊讶了。下面的代码片段显示了基本语法及其用法。
# syntax for dict comprehension {key_expression : value_expression for item in iterable} >>> words = ( python , is , a , big , snake ) >>> len_words = {word : len(word) for word in words} >>> len_words { python : 6, is : 2, a : 1, big : 3, snake : 5} >>> len_words_p = {word : len(word) for word in words if word.startswith( p )} >>> len_words_p { python : 6}
view raw dict.py hosted with ❤ by GitHub
总结
来源:Pexels
本文回顾了列表理解的基本语法及其在各种场景中的用法。
除了列表理解,还讨论了集合和字典理解。依靠这些理解有助于用Python创建基本的集合数据类型,使其具有更好的可读性。
推荐阅读专题
留言点赞发个朋友圈
我们一起分享AI学习与发展的干货
编译组: 刘玲君、王品一
相关链接:
https://medium.com/better-programming/9-things-to-know-to-master-list-comprehensions-in-python-8bc0411ec2ed
如转载,请后台留言,遵守转载规范
推荐文章阅读
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First HTML5 Programming
Eric Freeman、Elisabeth Robson / O'Reilly Media / 2011-10-18 / USD 49.99
What can HTML5 do for you? If you're a web developer looking to use this new version of HTML, you might be wondering how much has really changed. Head First HTML5 Programming introduces the key featur......一起来看看 《Head First HTML5 Programming》 这本书的介绍吧!