Python List Comprehensions

本文介绍了Python中列表推导的基本语法及其应用场景,包括简单的转换、使用条件表达式进行过滤及多重循环的应用。通过实例展示了如何利用列表推导来简化代码并提高编程效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 set builder notation. 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.

内容概要:《2024年中国城市低空经济发展指数报告》由36氪研究院发布,指出低空经济作为新质生产力的代表,已成为中国经济新的增长点。报告从发展环境、资金投入、创新能力、基础支撑和发展成效五个维度构建了综合指数评价体系,评估了全国重点城市的低空经济发展状况。北京和深圳在总指数中名列前茅,分别以91.26和84.53的得分领先,展现出强大的资金投入、创新能力和基础支撑。低空经济主要涉及无人机、eVTOL(电动垂直起降飞行器)和直升机等产品,广泛应用于农业、物流、交通、应急救援等领域。政策支持、市场需求和技术进步共同推动了低空经济的快速发展,预计到2026年市场规模将突破万亿元。 适用人群:对低空经济发展感兴趣的政策制定者、投资者、企业和研究人员。 使用场景及目标:①了解低空经济的定义、分类和发展驱动力;②掌握低空经济的主要应用场景和市场规模预测;③评估各城市在低空经济发展中的表现和潜力;④为政策制定、投资决策和企业发展提供参考依据。 其他说明:报告强调了政策监管、产业生态建设和区域融合错位的重要性,提出了加强法律法规建设、人才储备和基础设施建设等建议。低空经济正加速向网络化、智能化、规模化和集聚化方向发展,各地应找准自身比较优势,实现差异化发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值