您的位置:首页 > 编程语言 > Python开发

week03_python解析式

2018-08-20 21:19 423 查看
列表解析List Comprehension
语法:
[返回值 for 元素 in 可迭代对象 if 条件]

使用中括号[ ],内部是for循环,if条件语句可选

返回一个新列表
列表解析式是一种语法糖
编译器会优化,不会因为简写而影响效率

减少程序员工作量,减少出错

简化了代码,但可读性增强

举例说明:
生成一个列表,元素0-9,对每一个元素自增1后求平方返回新列表

target = []
for i in range(10):
target.append((i+1)**2)

print(target)

列表解析式,优化:

l1 = range(10)
l2 = [(i + 1)**2 for i in l1]
print(l2)

再优化:

a = [(i+1)**2 for i in range(10)]
print(a)
列表解析进阶:

获取10以内的偶数

even = []
for x in range(10):
if x % 2 == 0:
even.append(x)
print(even)
使用列表解析式:
even = [x for x in range(10) if x % 2 == 0]
print(even)
获取20以内的偶数,如果数是3的倍数也打印。想一下[i for i in range(20) if i % 2 == 0 elif i % 3 == 0]这样做行吗?

[i for i in range(20) if i % 2 == 0 elif i % 3 == 0]
# 这样写会报错,SyntaxError: invalid syntax, 因为解析式根本不认识elif

其实可以这样写:
[i for i in range(20) if i % 2 == 0 or i % 3 == 0]
[i for i in range(20) if i % 2 == 0 or not i % 3]

# not i % 3 这里其实相当于 not false 这样的语法
列表解析式进阶:

[expr for i in iterable1 for j in iterable2]
等价于
ret = []
for i in iterable1:
for j in iterable2:
ret.append(expr)
print([(i, j) for i in range(7) if i > 4 for j in range(20, 25) if j > 23])

print([(i, j) for i in range(7) for j in range(20, 25) if i > 4 if j > 23])

print([(i, j) for i in range(7) for j in range(20, 25) if i > 4 and j > 23])
练习题:
有一个列表lst = [1, 4, 9, 16, 2, 5, 10, 15],生成一个新列表,要求新列表元素是相邻2项的和
lst = [1, 4, 9, 16, 2, 5, 10, 15]

# ret = []
# for x in range(len(lst) - 1):
#     ret.append(lst[x] + lst[x + 1])
# print(ret)

print([lst[x] + lst[x + 1] for x in range(len(lst) - 1)])
九九乘法表:
[print('{}*{}={:<3}{}'.format(j, i, i*j, '\n' if i == j else ''), end="") for i in range(1, 10) for j in range(1, i+1)]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  列表 解析式