Python列表解析式和生成器表达式

列表解析

生成一个列表.对每一个元素自增1后平方返回新列表

lst = list(range(10))
newlist  = []
[ (i+1) ** 2 for i in range(1,11)]
print(newlist)

列表解析式语法:

【返回值 for 元素 in 可迭代对象 if 条件】

使用中括号【】,内部是for循环,if条件语句可选 但是不能出现else elif 最后返回一个新列表

列表解析式是一种语法糖:编译器会优化,不会行为简写而印象效率,反而因优化提高了效率,减少程序员工作量,减少出错,简化了代码 但可读性增强。

生成器表达式 Generator expression

- 语法:(返回值 for 元素 in 可迭代对象 if 条件),列表解析式的中括号换成小括号就行了,返回一个生成器

- 和列表解析式的区别:生成器表达式是按需计算(或者称为惰性求值,延迟计算),需要的时候才计算值// 列表解析式是立即返回

-生成器是重点(可迭代对象 可以生成一个迭代器

生成器例子    it = (x for x in range(10) if x%2)
first = next(it)

只有迭代器才能使用next()函数 不能使用的都不是迭代器

Python列表解析式和生成器表达式_第1张图片

集合解析式:{返回值 for 元素 in 可迭代对象 if 条件}

Python列表解析式和生成器表达式_第2张图片

字典解析式:{ 返回值 for 元素 in 可迭代对象 if条件}

Python列表解析式和生成器表达式_第3张图片

总结:

Python列表解析式和生成器表达式_第4张图片

列表解析式习题练习

第一题:返回1-10平方的列表
print([i**2 for i in range(1,11)])

第二题:有一个列表lst 生成一个新列表要求新列表元素是lst相邻两项的和
newlist = [1,4,9,16,2,5,10,15]
print([ newlist[i] + newlist[i+1] for i in range(len(newlist)-1)])

第三题:打印99乘法表   三种方式等价
1.  print([print('{}*{}={}{}'.format(j,i,i*j, '  ' if j > 1 and i*j < 10 else ' '),end = '\n' if j == i else '') for i in range(1,10) for j in range(1,i+1) ])
2.  print(''.join(['{}*{}={:<3}{}'.format(j,i,i*j, '\n' if i == j else '')for i in range(1,10) for j in range(1,i+1)]))

3.  for i in range(1,10):
    	for j in range(1,i+1):
        	print('{}*{}={}{}'.format(j,i,i*j, '  ' if j > 1 and i*j < 10 else ' '),end = '\n' if j == i else '')
  
 第四题:’0001‘.’absjdjassd‘是ID格式,要求以点号分割 左边4位从1开始是整数 右边是10位随机小写英文字母,以此生成前100个ID的列表  
import random
g = ['{:04}.{}'.format(j,''.join([chr(random.randint(97, 122)) for i in range(10)]) )for j in range(1,5)]
print(g)

你可能感兴趣的:(复习,笔记)