Python列表操作-推导式(List Comprehension)

简介: Python列表操作-推导式(List Comprehension)

Python列表操作-推导式(List Comprehension)
1.1 列表推导式的一般情况
列表推导式的一般语法结构:

new_list = [x for x in iterable]

**其中的iterable表示可迭代的对象,包括字符串(str)、列表(list)、元组(tuple)、字典(dict)、集合(set),以及生成器(generator)等。

下面举例说明:
1.1.1 迭代对象为字符串str

# 迭代对象为字符串str
str_list = [x.lower() for x in 'Bruce_liuxiaowei']
str_list1 = [x.upper() for x in 'burce_liuxiaowei']
print(str_list, str_list1, end='\n')

输出结果:

['b', 'r', 'u', 'c', 'e', '_', 'l', 'i', 'u', 'x', 'i', 'a', 'o', 'w', 'e', 'i']
['B', 'R', 'U', 'C', 'E', '_', 'L', 'I', 'U', 'X', 'I', 'A', 'O', 'W', 'E', 'I']

1.1.2 迭代对象为列表

# 迭代对象为列表list
list_list = [x ** 3 for x in [4, 5, 6, 7]]
print(list_list)

输出结果:

[64, 125, 216, 343]

1.1.3 迭代对象为元组

# 迭代对象为元组
tuple_list = [x+2 for x in (1, 2, 3, 4)]
print(tuple_list)
tuple_list = [x-4 for x in (1, 2, 3, 4)]
print(tuple_list)

输出结果:

[3, 4, 5, 6]
[-3, -2, -1, 0]

1.1.4 迭代对象为集合

# 迭代对象为集合
tuple_list = [x+3 for x in (1, 2, 3, 4)]
print(tuple_list)
tuple_list = [x-3 for x in (1, 2, 3, 4)]
print(tuple_list)

输出结果:

[4, 5, 6, 7]
[-2, -1, 0, 1]

1.1.5 迭代对象为生成器(generator)

# 迭代器为生成器(generator)
ge_list = [x for x in range(10)]
print(ge_list)

输出结果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

1.2 两层for循环的列表推导式
列表推导式中,可以同时包含多个for循环,比如同时两个for循环,举例说明:

1.2.1 代码:

print([x**2+y for x in range(8) for y in range(3, 6)])

输出结果:

[3, 4, 5, 4, 5, 6, 7, 8, 9, 12, 13, 14, 19, 20, 21, 28, 29, 30, 39, 40, 41, 52, 53, 54]

上述结果与下面的写法输出结果一样的

two_for_list = []
for x in range(8):
    for y in range(3, 6):
        two_for_list.append(x**2 + y)

print(two_for_list)

输出结果:

[3, 4, 5, 4, 5, 6, 7, 8, 9, 12, 13, 14, 19, 20, 21, 28, 29, 30, 39, 40, 41, 52, 53, 54]

备注:列表推导式中,三层或者三层以上的for循环很少用

1.3 使用两个变量来生成list
列表推导式也可以使用两个或多个变量来生成list,结合字典的使用,举例如下:

1.3.1 示例代码:

d = {
   'x': '4', 'y': '5', 'z': '6'}
d_list = [k+'='+v for k, v in d.items()]
print(d_list)

输出结果:

['x=4', 'y=5', 'z=6']

1.4 含if语句的列表推导式
列表推导式中还可以引入if条件语句,举例如下:

1.4.1 示例代码:

if_list = [x**3 for x in range(8) if x % 2 == 0]
print(if_list)

输出结果:

[0, 8, 64, 216]

上述列表推导式,如果用普通的for循环来完成,编写如下:

# 普通for循环
if_list_1 = []
for i in range(8):
    if i % 2 == 0:
        if_list_1.append(i**3)
print(if_list_1)

输出结果:

[0, 8, 64, 216]

通过对比,可以看出列表推导式的方式更显得Pythonic。当然,如果仅仅是编写上更简洁,可能不一定能显现出列表推导式的优势,下面我们来对比一下上述两种方式的运行时间效率。
image.png

从上面的运行结果进行对比,可以看出列表推导式的运行效率要高于普通的for循环编写方式。所以建议使用列表推导式,不仅写法更Pythonic,且运行效率更高。

1.5 包含if-else语句的列表推导式
1.5.1 示例代码:

if_else_list = [x ** 3 if x%2 == 0 else x+3 for x in range(10)]
print(if_else_list)

输出结果:

[0, 4, 8, 6, 64, 8, 216, 10, 512, 12]

1.6 包含两个if语句的列表推导式
1.6.1示例代码:

double_list = [x**2 for x in range(10) if x % 2==0 if x %3 ==0]
print(double_list)

输出结果:

[0, 36]

总结

如果想获取离散的元素,比如想获取第1、2、4个元素,能不能通过离散的索引值来获取呢?答案是否定的。

示例代码如下:

names = ['James', 'Michael', 'Emma', 'Emily']
print(names[1, 2, 4])

输出结果:

Traceback (most recent call last):
  File "/Users/liuxiaowei/PycharmProjects/Python基础教程/Python知识手册/tutorials/Python数据类型-List介绍/列表推导式/小结.py", line 17, in <module>
    print(names[1, 2, 4])
TypeError: list indices must be integers or slices, not tuple
相关文章
|
2月前
|
索引 Python
Python列表
Python列表。
55 8
|
2月前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
46 9
|
2月前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
76 14
|
2月前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
132 10
|
3月前
|
数据处理 开发者 Python
Python中的列表推导式:简洁高效的数据处理
在编程世界中,效率和可读性是代码的两大支柱。Python语言以其独特的简洁性和强大的表达力,为开发者提供了众多优雅的解决方案,其中列表推导式便是一个闪耀的例子。本文将深入探讨列表推导式的使用场景、语法结构及其背后的执行逻辑,带你领略这一特性的魅力所在。
|
3月前
|
开发者 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第41天】 在编程的世界中,效率与简洁是永恒的追求。本文将深入探讨Python编程语言中一个独特且强大的特性——列表推导式(List Comprehension)。我们将通过实际代码示例,展示如何利用这一工具简化代码、提升性能,并解决常见编程问题。无论你是初学者还是资深开发者,掌握列表推导式都将使你的Python之旅更加顺畅。
|
3月前
|
JavaScript 前端开发 算法
python中的列表生成式和生成器
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生的天地。通过自学前端技术2年半,现正向全栈开发迈进。如果你从我的文章中受益,欢迎关注,我将持续更新高质量内容,你的支持是我前进的动力!🎉🎉🎉
49 0
|
2月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
2月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2月前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
126 80