解析式 Comprehension
解析式是将一个容器类型的可迭代对象转换成另一个对应类型容器的工具。在转换过程中,可以指定元素必须符合一定的条件,才能添加至新的列表中,这样每个元素都可以按需要进行转换。
语法
[返回值 for element in iterable [ if condition ]]
使用范例
不带条件的
lst=[i for i in range(10)] print(lst)
运行结果
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
带条件的
lst = [i for i in range(10) if i % 2] print(lst)
运行结果
[1, 3, 5, 7, 9]
多条件列表解析
lst = [i for i in range(10) if i % 2 if i % 3] print(lst)
运行结果
[1, 5, 7]
多层循环解析式
lst = [(i, j) for j in 'abc' for i in range(3)] print(lst)
运行结果
[(0, 'a'), (1, 'a'), (2, 'a'), (0, 'b'), (1, 'b'), (2, 'b'), (0, 'c'), (1, 'c'), (2, 'c')]
集合解析式
语法:
{返回值 for 元素 in 可迭代对象 if 条件}
举例
s1={i for i in range(2)} print(s1)
运行结果
{0, 1}
字典解析式
语法
{返回值 for 元素 in 可迭代对象 if 条件} 返回值的格式为key:value
举例
dict1={i:pow(i,3) for i in range(3)} print(dict1)
运行结果
{0: 0, 1: 1, 2: 8}
解析式练习
1、打印乘法表
lst = [print("{} * {} = {:<2}".format(i, j, i * j), end=' ' if i==j else ' ') for i in range(1, 10) for j in range(1, i + 1)] print()
运行结果
1 * 1 = 1 2 * 1 = 2 2 * 2 = 4 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36 7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49 8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64 9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81