【python基础】 高级特性

本章包含:迭代、列表生成式、生成器、迭代器
参考:廖雪峰python

高级特性

  • 迭代
    • 迭代list和tuple和string
    • 迭代字典
    • 判断是否可迭代
    • 索引-元素对
  • 列表生成式
    • list生成列表
    • 列表生成式
    • 关于if 和 else
  • 生成器
    • 为什么使用生成器
    • 用() 生成生成器
    • 访问元素
    • StopIteration
  • 迭代器
    • 声明
    • 为什么Iterable不是Iterator

迭代

迭代list和tuple和string

for .. in ..

迭代字典

  1. 默认迭代对象为 keys
    for i in dic
# 迭代字典
dic = {'a':12, 'b':13, 'c':14}
for i in dic:
    print(i)
  1. 迭代values
    for i in dic.values()
dic = {'a':12, 'b':13, 'c':14}
for i in dic.values():
    print(i)
  1. 迭代keys和values
    for i in dic.items -> (keys,values)
dic = {'a':12, 'b':13, 'c':14}

for i in dic.items():
    print(i)
    print(i[0])

判断是否可迭代

from collections.abc import Iterable 引入 Iterable
isinstance(object, Iterable) 返回True或者False
【python基础】 高级特性_第1张图片

索引-元素对

enumerate( iter) 变成索引-元素对
【python基础】 高级特性_第2张图片

列表生成式

list生成列表

list(range(1,11)

 l = list(range(1,11))
 print(l)

#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

列表生成式

  1. [x * x for x in range(1,11)]
l = [x*x for x in range(1,11)]
print(l)
  1. 添加if 筛选元素
    [x * x for x in range(1,11) if x % 2 == 0]
l = [x*x for x in range(1,11) if x % 2==0]
print(l)

#[4, 16, 36, 64, 100]
  1. 多层循环
    [m + n for m in 'abc' for n in 'efg']
l = [m + n for m in 'abc' for n in 'efg']
print(l)

#['ae', 'af', 'ag', 'be', 'bf', 'bg', 'ce', 'cf', 'cg']
  1. 两个变量
    [k + ' = '+ v for k, v in dic.items()]
dic = {'a':'12', 'b':'13', 'c':'14'}
l = [k + ' = '+ v for k, v in dic.items()]
print(l)

#['a = 12', 'b = 13', 'c = 14']

关于if 和 else

l = [x for x in range(1,11) if x % 2 ==0]
p = [x if x % 2 ==0 else 0 for x in range(1,11) ]
一个iffor之后,此时if表示筛选条件,
一个if…elsefor之前,此时for才是筛选条件。

生成器

为什么使用生成器

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

用() 生成生成器

(x for x in range(10))
【python基础】 高级特性_第3张图片

访问元素

  1. next(generator)
    【python基础】 高级特性_第4张图片
  2. for方法(生成器是可迭代对象)
    【python基础】 高级特性_第5张图片
  3. yield
    yield 关键字就是将函数变成generator函数,每次调用next都会在yield语句之后停止

【python基础】 高级特性_第6张图片

StopIteration

迭代完之后会抛出 StopIteration 错误

迭代器

声明

可以直接使用for的几种数据类型:

  1. list , tuple , dict, set, str 等
  2. 生成器

可以用for迭代的对象统称: Iterable
isinstance判断是否是Iterable

可以被next调用并返回下一个值得对象统称: Iterator
isinstance判断是否是Iterator

只有生成器函数是Iterator其他都不是
iter()将Iterable 转换为 Iterator

为什么Iterable不是Iterator

这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。
Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。

你可能感兴趣的:(python基础,python,开发语言,大数据)