列表推导式
列表推导式:利用for循环从已有列表快速生成满足要求的列表。
-
语法形式:
[ 表达式 for 表达式的变量 in 已有序列 ( if 过滤条件 ) ]
示例代码如下:
>>>my_list = [i * i for i in range(5)]
>>>print(my_list)
[0, 1, 4, 9, 16]
加入if语句筛选出的列表:
>>>my_list = [i for i in range(10) if i %2 == 0]
>>>print(my_list)
[0, 2, 4, 6, 8]
运用多个for循环,实现多个序列的元素组合:
序列x的每个元素和序列y的每个元素分别组合
>>>list1 = ['a', 'b']
>>>my_list = [[x, y] for x in range(3) for y in list1]
>>>print(my_list)
[[0, 'a'], [0, 'b'], [1, 'a'], [1, 'b'], [2, 'a'], [2, 'b']]
集合推导式
集合推导式写法类似于列表推导式,只不过集合推导式用一对大括号表示,而不是一对中括号。同时集合推导式会去除结果中的重复元素。
-
语法形式:
{表达式 for 变量 in 已有序列 if 过滤条件}
示例代码如下:
>>>my_set = {x*x for x in range(-5, 5)}
>>>print(my_set)
{0, 1, 4, 9, 16, 25}
>>>my_set = {x*2 for x in ["A", "B", "A", 2, 4, 2] if str(x).isdigit()} #提取数字
>>>print(my_set)
{8, 4}
生成器推导式
尝试通过已有序列快速生成满足条件的元组时,产生的是一个生成器对象 。
生成器是一个用来创建序列的对象,可以迭代出一个庞大的序列。每次迭代生成器时,会记录上次调用的位置,返回下一个值。可以通过tuple()、list()转换成元组或者列表。
访问生成器的元素可以通过生成器对象的__next__()方法和系统的next()方法。
-
语法形式:
( 表达式 for 表达式的变量 in 已有序列 ( if 过滤条件 ) )
示例代码如下:
my_list = (i * i for i in range(6))
print(my_list)
print(my_list.__next__()) #使用生成器__next__()方法逐个访问
print(my_list.__next__())
print('===========')
print(next(my_list)) #使用系统方法next()逐个访问
print(next(my_list))
print('===========')
#for循环打印元素
for each in my_list:
print(each)
print('===========')
'''
print(my_list.__next__()) #迭代结束后,再使用__next__()会报错
print(next(my_list)) #使用系统next()方法不会报错,同时也不会有显示
'''
程序运行结果:
<generator object <genexpr> at 0x000001A1E8D563B0>
0
1
===========
4
9
===========
16
25
===========