介绍
列表推导是python中迭代协议的一个有趣且使用的例子,通常而言列表推导可以用for
循环完全替代,但是列表推导显而易见只需要更少的代码,并且在大部分情况下比for
循环运行速度更快,这是因为列表推导的迭代在解释器内部是以C语言的速度执行的,而不是以手动python代码执行的,尤其是对于较大的数据集合,列表推导有较大的性能优势。
目的:当我们需要对一个序列上的每一个元素都执行同一个操作时,使用列表推导就非常方便。
基本用法
Example 1. 输出1-10的平方,并保存在列表中。
# 列表推导法
squa = [x ** 2 for x in range(1, 10)]
# for循环等效代码
squa = []
for x in range(1, 10):
squa.append(x ** 2)
可以看到列表推导只需一行代码即可解决for
循环3行代码的内容。
Example 2. 逐行读取文件内容,并转换为大写
# 列表推导法
content = [line.upper() for x in open('a.txt')]
# for循环
content = []
for line in open('a.txt'):
content.append(line.upper())
Example 3.将一个字符串的每个元素重复一遍后形成新的字符串
s1 = 'apple'
# 列表推导
s2 = [x * 2 for x in s1]
# for循环
s2 = []
for x in s1:
s2.append(x * 2)
高级用法
if语句
除了在列表推导中用for
循环构建迭代器以为,还可以引入if
语句做一次判断
Example 4. 构建一个1-10中偶数的平方组成的列表
# 列表推导
list1 = [x ** 2 for x in range(1, 10) if x % 2 == 0]
# 输出:[4, 16, 36, 64]
# for循环
list1 = []
for x in range(1, 10):
if x % 2 == 0:
list1.append(x ** 2)
for循环嵌套
列表推导允许任意个for
循环嵌套,不过我们一般将其用于简单的迭代,当循环层级太多时,直接用for
循环会使得程序可读性更高。
Example 5. 将1-9分别于1-9相乘的结果存为列表
# 列表推导
list1 = [x * y for x in range(1, 10) for y in range(1, 10)]
# for循环
for x in range(1, 10):
for y in range(1, 10):
print(x * y, end='')
Example 6. 将两个字符串一一对应拼接起来
s1 = 'abc'
s2 = 'xyz'
# 列表推导
s3 = [x + y for x in s1 for y in s2]
# for循环
s3 = ''
for x in s1:
for y in s2:
s3 += x + y
# 输出:['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz']
可以看到python中列表推导还是很强大并且很方便的,我这次简单讲基本和两个扩展使用方式介绍给大家,也欢迎大家和我继续交流更深入的列表推导功能。