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
相关文章
|
14天前
|
安全 数据处理 索引
深入探讨 Python 列表与元组:操作技巧、性能特性与适用场景
Python 列表和元组是两种强大且常用的数据结构,各自具有独特的特性和适用场景。通过对它们的深入理解和熟练应用,可以显著提高编程效率和代码质量。无论是在数据处理、函数参数传递还是多线程环境中,合理选择和使用列表与元组都能够使得代码更加简洁、高效和安全。
32 9
|
12天前
|
人工智能 数据库连接 开发工具
[oeasy]python069_当前作用域都有些什么_列表dir_函数_builtins
本文介绍了Python中`dir()`函数的使用方法及其作用。`dir()`可以列出当前作用域内的所有变量和成员,类似于`locals()`,但`dir()`不仅限于本地变量,还能显示模块中的所有成员。通过`dir(__builtins__)`可以查看内建模块中的所有内建函数,如`print`、`ord`、`chr`等。此外,还回顾了`try-except-finally`结构在数据库连接中的应用,并解释了为何`print`函数可以直接使用而无需导入,因为它位于`__builtins__`模块中。最后,简要提及了删除`__builtins__.print`的方法及其影响。
26 0
|
3月前
|
索引 Python
Python列表
Python列表。
64 8
|
3月前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
55 9
|
3月前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
90 14
|
3月前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
172 10
|
4月前
|
数据处理 开发者 Python
Python中的列表推导式:简洁高效的数据处理
在编程世界中,效率和可读性是代码的两大支柱。Python语言以其独特的简洁性和强大的表达力,为开发者提供了众多优雅的解决方案,其中列表推导式便是一个闪耀的例子。本文将深入探讨列表推导式的使用场景、语法结构及其背后的执行逻辑,带你领略这一特性的魅力所在。
|
9月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1130 1
|
8月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
|
8月前
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。

热门文章

最新文章