python可迭代对象 迭代器 列表解析 生成器 产生偏移

python 迭代

属于可迭代对象的类型有:
1.序列类型
2.字典和file
3.自定义类型,在自定义类型中实现了__iter__()或者__getitem__()方法。

python可迭代对象 迭代器 列表解析 生成器 产生偏移_第1张图片

如果对象内部实现了__iter__()或者__getitem__()这个方法,当我们对此对象调用此方法时候,就会在内存中给它创建一个属于当前迭代器的可迭代对象,而我们使用此内存地址中的对象就可以实现迭代了,就可以那么这个对象就是一个可迭代对象。

迭代器

python可迭代对象 迭代器 列表解析 生成器 产生偏移_第2张图片
创建迭代器有两种方式:可以使用可迭代对象的内置方法创建迭代器,另一种就是使用iter()创建迭代器。只不过在for中不用创建迭代器,因为for本身实现了对这个可迭代对象的自动迭代。

#第一种方式
>>> iter1=list1.__iter__()
>>> print(iter1)

>>> iter1.next()
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: 'list_iterator' object has no attribute 'next'
>>> iter1.__next__()
1
>>>
>>>
>>>
>>> iter1.__next__()
2
>>> iter1.__next__()
3
>>> iter1.__next__()
4

#第二种方式
>>> list1=["xiaopang","like","qunzi"]
>>> iterator=iter(list1)
>>> print(next(iterator))
xiaopang
>>> print(next(iterator))
like
>>> print(next(iterator))
qunzi
>>> print(next(iterator))
Traceback (most recent call last):
  File "", line 1, in 
StopIteration

python可迭代对象 迭代器 列表解析 生成器 产生偏移_第3张图片
python可迭代对象 迭代器 列表解析 生成器 产生偏移_第4张图片

Python列表解析

列表解析:根据已有的列表高效生成新列表的方式。

语法:
[expression for iter_var in iterable]
[expression for iter_var in iterable if con_expr]
python可迭代对象 迭代器 列表解析 生成器 产生偏移_第5张图片
python可迭代对象 迭代器 列表解析 生成器 产生偏移_第6张图片
图片代码如下:



>>> list1=[1,2,3,4,5]
>>> list2=[]
>>> for i in list1:
...     list2.append(i**2)
...
>>> print(list2)
[1, 4, 9, 16, 25]
>>> list2=[x**3 for x in list1]
>>> print(list2)
[1, 8, 27, 64, 125]
>>> list3=[x**4 for x in list1 if x>=9]
>>> print(list3)
[]
>>> list3=[x**4 for x in list1 if x>=3]
>>> print(list3)
[81, 256, 625]

python可迭代对象 迭代器 列表解析 生成器 产生偏移_第7张图片

>>> [for i in range(0,11)]
File "", line 1
    [for i in range(0,11)]
       ^
SyntaxError: invalid syntax
>>> [i for i in range(0,11)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> for ele in [i**3 for i in range(0,11) if i%2==0]:print(ele)
...
0
8
64
216
512
1000


os

import os

os.listdir(‘E:/’)
[’$RECYCLE.BIN’, ‘Cuda’, ‘CUDNN’, ‘gitTest’, ‘java_tools’, ‘jdk’, ‘MindMaster’, ‘opencv’, ‘System Vo
lume Information’, ‘Ubuntu64’, ‘VirtualMachineDirectory’, ‘YourUninstaller’, ‘郑元鹤’]
在这里插入图片描述
str.endswith()
python可迭代对象 迭代器 列表解析 生成器 产生偏移_第8张图片

小练习:
1.获取本地某个目录下的所有文件名称列表
2.基于已有的文件列表将所有的文件中所有以.docx结尾的文件生成新的列表

代码:
#简历模板目录为例:
在这里插入图片描述

#1.获取本地某个目录下的所有文件名称列表
>>> import os
>>> list1=os.listdir("G:\\xxx\\python面试简历")
>>> print(list1)
['2年经验分析工程师简历.docx', 'python+AI面试简历.docx', 'python开发面试简历.doc', '~$thon+AI面试简
历.docx', '~$thon开发面试简历.doc', '~$经验分析工程师简历.docx', '爬虫简历.doc']
#2.基于已有的文件列表将所有的文件中所有以.docx结尾的文件生成新的列表
>>> endList=[x for x in list1 if x.endswith(".docx")]
>>> print(endList)
['2年经验分析工程师简历.docx', 'python+AI面试简历.docx', '~$thon+AI面试简历.docx', '~$经验分析工程师
简历.docx']

将两个列表中的元素任意组合成多个含有两个元素元组的一个列表。
python可迭代对象 迭代器 列表解析 生成器 产生偏移_第9张图片
python可迭代对象 迭代器 列表解析 生成器 产生偏移_第10张图片

生成器

由于每次并不会用到列表当中所有的元素,因此我们我们对列表解析进行扩展,将[]换成(),叫做生成器。他可以使用一个表达式一次只生成一个值,叫惰性计算方式。

#生成器表达式
python可迭代对象 迭代器 列表解析 生成器 产生偏移_第11张图片

#若是不赋值给一个新的变量,则每次调用next()方法的结果都是第一个值。
#生成器生成的每个值都是事实生成的,而不是已经全部生成在内存当中的,这样节省内存空间且效率快。

在这里插入代码片
>>> [x**2 for x in range(0,10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> (x**2 for x in range(0,10))
 at 0x0000000002F33150>
>>> (x**2 for x in range(0,10)).next()
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: 'generator' object has no attribute 'next'
>>> next((x**2 for x in range(0,10)))
0
>>> next((x**2 for x in range(0,10)))
0
>>> next((x**2 for x in range(0,10)))
0
>>> x1=(x**2 for x in range(0,10))
>>> next(x1)
0
>>>
>>> next(x1)
1
>>> next(x1)
4
>>> next(x1)
9
>>> next(x1)
16
>>> next(x1)
25
>>> next(x1)
36
>>> next(x1)
49
>>> next(x1)
64
>>> next(x1)
81
>>> next(x1)
Traceback (most recent call last):
  File "", line 1, in 
StopIteration

python可迭代对象 迭代器 列表解析 生成器 产生偏移_第12张图片

产生偏移和元素

索引偏移 非完备遍历中用于生成索引 range(x,y,stride)
同时偏移索引和索引元素 enumerate() 返回一个生成器对象。

python可迭代对象 迭代器 列表解析 生成器 产生偏移_第13张图片


>>> url="xiaopang.like.xiaohe"
>>> enumerate(url)

>>> g1=enumerate(url)
>>> g1.next()
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: 'enumerate' object has no attribute 'next'
>>> next(g1)
(0, 'x')
>>> next(g1)
(1, 'i')
>>> next(g1)
(2, 'a')
>>> next(g1)
(3, 'o')
>>> next(g1)
(4, 'p')
>>> next(g1)
(5, 'a')
>>> next(g1)
(6, 'n')
>>> next(g1)
(7, 'g')
>>> next(g1)
(8, '.')
>>> next(g1)
(9, 'l')
>>> next(g1)
(10, 'i')
>>> next(g1)
(11, 'k')
>>> next(g1)
(12, 'e')
>>> next(g1)
(13, '.')
>>> next(g1)
(14, 'x')
>>> next(g1)
(15, 'i')
>>> next(g1)
(16, 'a')
>>> next(g1)
(17, 'o')
>>> next(g1)
(18, 'h')
>>> next(g1)
(19, 'e')
>>> next(g1)
Traceback (most recent call last):
  File "", line 1, in 
StopIteration

完结


接下来一片介绍python文件对象。

你可能感兴趣的:(python基础教程,可迭代对象,迭代器,列表解析,生成器,产生偏移)