Python中的列表理解

为了创建列表,最明显和记住的解决方案是使用for循环。

示例

Python 3.6.8 (default, Apr 25 2019, 21:02:35)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.

>>> flights = {'09:35':'Long Beach', '10:00':'los-angeles', '11:00':'san jose'}
>>> flight_time_list = []
>>> for key in flights.keys():
...     flight_time_list.append(key)
...
>>> print(flight_time_list)
['09:35', '10:00', '11:00']
>>>

Python的内置理解功能使我们可以将列表创建中的行数减少为一行。

示例

-bash-4.2$ python3
Python 3.6.8 (default, Apr 25 2019, 21:02:35)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.

>>> flights = {'09:35':'Long Beach', '10:00':'los-angeles', '11:00':'san jose'}
>>> flight_time_list = [ key for key in flights.keys()]
>>> print(flight_time_list)
['09:35', '10:00', '11:00']
>>>

列表理解的语法

列表理解开始用[和],以确保结果的列表。

    [expression for item in list]

理解也可以利用,如果条件

示例:将常见项目分组到列表中

Python 3.6.8 (default, Apr 25 2019, 21:02:35)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.

>>> grade_k = ['maddy', 'sriansh', 'owen', 'molly']
>>> grade_first = ['molly', 'owen', 'ricky', 'sid']
>>> common_names = [a for a in grade_k for b in grade_first if a==b]
>>> print(common_names)
['owen', 'molly']
>>>

使用理解的优势

  1. 理解需要更少的代码。Python解释器已经过优化,可以尽快运行理解。

  2. 理解的执行速度比for循环快。

  3. 可以在无法使用for循环的地方使用理解。所有的理解都出现在赋值运算符的右边,这是for循环无法做到的。