0
点赞
收藏
分享

微信扫一扫

列表推导式和生成器推导式

爱做梦的夏夏 2022-04-13 阅读 51
python

列表推导式

列表推导式:利用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']]

 

生成器推导式

尝试通过已有序列快速生成满足条件的元组时,产生的是一个生成器对象 。

生成器是一个用来创建序列的对象,可以迭代出一个庞大的序列。每次迭代生成器时,会记录上次调用的位置,返回下一个值。可以通过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
===========

 

举报

相关推荐

0 条评论