八 Python推导式、生成器、迭代器

八 Python列表推导式

1. 迭代器

1-1. 介绍:

通过for循环遍历对象的每一个元素的过程
优势:节省内存空间,用多少取多少

1-2. 用法:

  1. 判断是迭代器还是可迭代的对象
from collections import Iterable,Iterator
#判断是否为可迭代对象
print(isinstance('abc',(Iterable,str)))   # str 不可变 or 但是有可迭代的方法  # True
print(isinstance([1,2,3,4],Iterable)) # True
print(isinstance(range(10),Iterable)) # True
print(isinstance(123,Iterable)) # False
print(isinstance({1,2,3,4},Iterable)) # True
# tips: 输出为True的及为可迭代对象(除了整数外,其它几乎均为可迭代对象)

# 判断是否为迭代器
li = [1,2,3,4]  # Iterable
print(isinstance(li,Iterator))  # False
lis = iter(li)  # 迭代器
print(isinstance(lis,Iterator))
# tips: 输出为True的及为迭代器
  1. 基本用法
from collections import Iterable,Iterator
li = [1,2,3,4]
lis = iter(li)
print(lis.__next__()) 
# 用法2
print(next(lis))# 输出结果均为1,用多少就需要多少个print

1-3 tips:

tips:

  1. next 只能顺延调用,不能往前
  2. 可迭代对象不一定是迭代器
  3. 迭代器不支持索引取值
  4. 超出范围会报错 StopIteration

2. 生成器

2-1. 介绍

可以实现多任务

g = (i for i in range(10))  # generator
print(g)  # 输出结果含有内存地址和generator的为生成器

2-2. 用法

  1. 基本用法:自定义长度列表
def test(number):
    n = 0
    # li = []
    while n<number:
        # li.append(n)
        yield n
        n += 1
    # print(li)
#
res = test(20000)
print(res)  # generator生成器
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__()) #有多少个print,就可输出多少个
g = (i for i in range(10))  # generator
#print(g)
print(next(g)) # 输出结果为1,有多少个print,就可输出多少个
  1. yield (遇到yield(生成器),函数会暂停,将对象返回,下次会继续上次暂停的地方执行)

3. 推导式

3-1. 介绍

3-2. 常见用法:

  1. 列表推导式
li1 = [i/2 for i in range(1,21)]
print(li1) #输出为[0.5,1.0,1.5...9.5,10.0]
  1. dict字典推导式
li = ["name","age","gender"]
li1 = ["amy","18","male"]
dic1 = {0:"name",1:"age"}
dic2 = {li.index(i):i for i in li}
print(dic2) # 输出结果为:{0: 'name', 1: 'age', 2: 'gender'}
  1. set 集合(随机生成10~100之间的元素,并且去重)
s1 = {random.randint(1,100) for i in range(10)}
print(type(s1))
print(len(s1))

s2 = {i for i in range(10)}
s3 = [i for i in range(10)] # list
print(s2)
print(type(s2)) 
'''
输出结果为:
<class 'set'>
10
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
<class 'set'>
'''
  1. 生成随机列表10个元素 <0 的数进行平方,生成新的列表
import random
a = random.randint(-20,10)
print(a)
rli = [random.randint(-20,10) for i in range(10)]

def f(x):
    return x**2

f(2)
rli2 = map(lambda x:x**2,filter(lambda x:x<0,rli)) # 1.map函数拟定返回规则;2.筛选出<0的元素构建新的序列
print(list(rli2))

4. 三目运算符

4-1. 介绍

a = 1
b = 2
# 常规写法
if b-a>0:
    print(b-a)
else:
    print(a+b)
    
# 三目写法    
print(b-a if b-a>0 else a+b)

列表

li4 = [i+j for i in "123" for j in "abc"]
print(li4)
字典
dic = {"name":"amy","gender":"female"}
li5 = [k+":"+v for k,v in dic.items()]
print(li5)
发布了27 篇原创文章 · 获赞 11 · 访问量 1491

猜你喜欢

转载自blog.csdn.net/weixin_45550881/article/details/103400212