Python中列表推导和生成器表达式都是用来快速创建序列的工具,但它们的实现方式略有不同。本文将讲解它们的具体用法和区别。
列表推导
列表推导是创建一个新列表的方式,可以通过一个现有列表或其他可迭代对象来创建一个新列表,新列表中每个元素是原列表的一个元素经过变换后的结果。
列表推导的语法如下:
[ expression for item in iterable if condition ]
其中,expression
是一个 Python 表达式,item
是一个迭代变量,iterable
是一个可迭代的对象,condition
是一个可选的条件表达式。
例如,我们可以利用列表推导来生成一个包含1到10的平方的列表:
squares = [x**2 for x in range(1, 11)]
print(squares)
输出结果为:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
另外一个例子,可以利用列表推导来排除掉列表中的空字符串:
words = ['hello', '', 'world', '', '']
non_empty_words = [word for word in words if word]
print(non_empty_words)
输出结果为:['hello', 'world']
生成器表达式
生成器表达式和列表推导类似,也是用来创建一个新序列的,不过它不会像列表推导那样在内存中一次性产生所有元素,而是在请求时才生成并返回这些元素,因此占用的内存空间要小很多。
生成器表达式的语法如下:
( expression for item in iterable if condition )
其中,expression
是一个 Python 表达式,item
是一个迭代变量,iterable
是一个可迭代的对象,condition
是一个可选的条件表达式。
例如,我们可以利用生成器表达式来生成一个包含1到10的平方的生成器对象:
squares = (x**2 for x in range(1, 11))
for square in squares:
print(square)
输出结果为:
1
4
9
16
25
36
49
64
81
100
另外一个例子,可以利用生成器表达式来排除掉列表中的空字符串:
words = ['hello', '', 'world', '', '']
non_empty_words = (word for word in words if word)
for word in non_empty_words:
print(word)
输出结果为:
hello
world
可以看到,生成器表达式和列表推导看起来很相似,但是前者使用圆括号而不是方括号。此外,生成器表达式不会一次性生成所有元素,而是按需生成。因此,如果你需要存储大量的元素,列表推导可能比生成器表达式更为适合,但是如果你只需要迭代处理,那么使用生成器表达式可能会更为高效。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 列表推导和生成器表达式的使用 - Python技术站