Python学习7

迭代

# 迭代
# Python的迭代不仅可以用在 list 或tuple 上,还可以作用在其他可迭代对象上。

# 迭代字符串
for char in "好好学Python,将来去板砖":
    print(char, end=" ")
print("\n")
# 迭代字典

dict = {"济南":"鲁A", "青岛":"鲁B", "烟台":"鲁Y"}
# 键迭代
for keys in dict.keys():
    print("键名--->", keys)
print("\n")
# 值迭代
for values in dict.values():
    print("值名--->", values)
print("\n")
# 键值对迭代
for item in dict.items():
    print("键值对--->", item)
print("\n")

# 迭代list
for x in [x for x in range(6)]:
    print("--->{}".format(x))
print("\n")

迭代器 

iter()方法和next()方法

# Python 迭代器
# 迭代器有两个基本的方法:iter() 和 next(),且字符串,
# 列表或元组对象都可用于创建迭代器,迭代器对象可以使用常规 for 语句进行遍历,也可以使用 next() 函数来遍历。

# iter()  传入一个可迭代对象
str1 = "好好学Python,将来去搬砖"
iter1 = iter(str1)    # 返回一个对象
iter2 = list(iter(str1)) # 解析迭代对象

print(iter1)
print(iter2)
print("\n")

# 遍历迭代器
for x in iter1:
    print(x)

# 元组创建迭代器
iter3 = iter((1,2,3,4))
# next方法遍历迭代器或
while True:
    try:
        print(next(iter3))
    except StopIteration:   # 没有元素进行迭代的时候捕获错误
        break


一行代码写9*9乘法表

# 一行代码写9*9乘法表
print("\n".join([" ".join("{} x {} = {}\t".format(i,j, i*j) for j in range(1, i+1)) for i in range(1, 10)]))

# 代码解析
# 生成第一个迭代对象
# [for i in range(1, 10)]
# 生成第二个迭代对象
# [(for j in range(1, i+1)) for i in range(1, 10)]
# 计算参数
# [( "{} x {} = {}\t".format(i,j,i*j) for j in range(1, i+1)) for i in range(1, 10)]
# join() 指定方式连接字符串
# print("\n".join([" ".join("{} x {} = {}\t".format(i,j,i*j) for j in range(1, i+1)) for i in range(1, 10)]))

生成器

generator

特点 边循环边计算,配合yield使用 在生成器中调用next()时遇到yeild语句返回

# 生成器
# 但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含 1000 万个元素的列表,
# 不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
# 所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?
# 这样就不必创建完整的 list,从而节省大量的空间。
# 在 Python 中,这种一边循环一边计算的机制,称为生成器:generator。
# 在 Python 中,使用了 yield 的函数被称为生成器(generator)。
# 跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器

# 生成器创建 [] 改为()
gen = (x * x for x in range(1,5))
print(gen)

# 遍历生成器
for x in gen:
    print(x)

# 函数创建生成器
def func():
    for j in range(1, 5):
        yield j

# print(func())

# 生成器特点,一边循环,一边计算
# 变成 generator 的函数,
# 在每次调用 next() 的时候执行,遇到 yield语句返回,再次执行时从上次返回的 yield 语句处继续执行
def fibon(n):
    a = b = 1
    for i in range(n):
        yield a
        a,b = b, a+b

# for i in fibon(100):
#     print(i)

def odd():
    print ( 'step 1' )
    yield ( 1 )
    print ( 'step 2' )
    yield ( 3 )
    print ( 'step 3' )
    yield ( 5 )

o = odd()
print(next(o))
print(next(o))
print(next(o))
print(next(o))

杨辉三角

# 杨辉三角
def triangle():
    L = [1]
    while True:
        yield L
        L.append(0)
        L = [L[i-1] + L[i] for i in range(len(L))]

n = 0
for i in triangle():
    print(i)
    n = n + 1
    if n == 10:
        break
# 迭代器和生成器

class func:
    def __init__(self, start):
        self.start = start

    def __iter__(self):
        n = self.start
        while n > 0:
            yield n
            n -= 1
    def __reversed__(self):
        n = 1
        while n <= self.start:
            yield n
            n += 1

# for i in reversed(func(30)):
#     print(i)
#
# print("\n")
# for j in func(30):
#     print(j)


# 同时迭代多个序列
# 使用zip包 ,基于最短的遍历

ls1 = ["济南", "青岛", "烟台"]
ls2 = ["鲁A", "鲁B", "鲁Y"]
for city, plate in zip(ls1, ls2):
    # print(city, plate)
    pass

dict1 = dict(zip(ls1, ls2))
print(dict1)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值