博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python List Comprehensions
阅读量:4031 次
发布时间:2019-05-24

本文共 3306 字,大约阅读时间需要 11 分钟。

An Introduction to List Comprehensions in Python


The basics.

Let’s start with a simple list.

>>> my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>>> my_list[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Quite often, we’ll need to build a new list from the elements of an existing list. For example, let’s say we want to make a list containing all elements of my_list, each multiplied by 2. A common way to do this is by iterating through the existing list and building the new list:

>>> new_list = []>>> for x in my_list:...   new_list.append(x * 2)... >>> new_list[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

Now let’s take a look at how to do this using Python’s list comprehension syntax.

>>> new_list = [x * 2 for x in my_list]>>> new_list[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

Syntax.

The syntax for list comprehension is based on . Given the form [Y for X in LIST]Y is commonly referred to as the output function , X is the variable, and LIST is the input set. This statement says to do Y on each X in LIST.

For an example of using a different output function , let’s say say we want a new list that contains each number in my_list as a string type…

>>> [str(x) for x in my_list]['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']

You may be asking yourself why we wouldn’t just use map() here:

>>> map(str, my_list)['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']

In this example, map looks like a good alternative. However, for slightly more complicated requirements, list comprehension can be a bit more concise. For example, when we’d like to specify a predicate .

The predicate.

Consider our previous example, where we want to create a list of string types for each element in my_list, except this time we only want the elements which are even numbers. A typical way to do this would be:

>>> new_list = []>>> for x in my_list:...   if (x % 2) == 0:...     new_list.append(str(x))... >>> new_list['2', '4', '6', '8', '10']

In order to use map() here we would need to first filter the list to exclude the odd numbers.

Using the list comprehension syntax would look like this:

>>> new_list = [str(x) for x in my_list if (x % 2) == 0]>>> new_list['2', '4', '6', '8', '10']

This version introduces the predicate, an expression after the list which acts as a filter on which elements get passed to the output function.

Neat, clear and concise.

Loops of loops.

Finally, it’s worth mentioning that you can use list comprehensions to iterate on more than one list. For example:

>>> list_a = ['A', 'B']>>> list_b = [1, 2]>>> [(x, y) for x in list_a for y in list_b][('A', 1), ('A', 2), ('B', 1), ('B', 2)]

Just like you would expect in for loops, the last loop moves the fastest. Also note that this method returns a list of tuples. If you’d like nested lists, you can also nest one list comprehension within another.

>>> list_a = ['A', 'B']>>> list_b = ['C', 'D']>>> [[x+y for x in list_a] for y in list_b][['AC', 'BC'], ['AD', 'BD']]

Summary.

List comprehension in Python can often provide a neat, clear, and concise syntax for creating lists from other lists. However, one should always be aware that, particularly for complex transformations or predicates, the concise and terse syntax can quickly become very difficult to read. In these cases, it’s often beneficial to revert to traditional looping constructs.

Further reading.

转载地址:http://qnhbi.baihongyu.com/

你可能感兴趣的文章
github push 出现connection refused 的处理办法
查看>>
Linux配置sendmail实现PHP发送邮件
查看>>
c++ 特性回顾
查看>>
网站注册的时候,烦人的生日年份选择的改进想法
查看>>
游戏开发两年记 之 工程和理论需双剑合璧
查看>>
Nachos中switch汇编源码分析
查看>>
游戏开发两年之产品逻辑鸡肋么?
查看>>
secureCRT和Xshell登录Ubuntu
查看>>
secureCRT和Xshell登录ubuntu
查看>>
Apache下c语言的cgi如何获得Get,Post参数
查看>>
protobuf的使用初探
查看>>
ngx_http分析
查看>>
搭建一个php学习框架mycake
查看>>
MVC模式概念
查看>>
大量拉取网络数据的策略总结
查看>>
php把一个格式化的文件转换为一个二维数组
查看>>
DOM学习
查看>>
php遍历一个指定文件夹
查看>>
CakePHP 的代码结构
查看>>
Magento 的目录结构
查看>>