Python中迭代器和列表解析怎么使用?
Jul 17, 2017 am 09:47 AM迭代器:初探
上一章曾经提到过,其实for循环是可用于任何可迭代的对象上的。实际上,对Python中所有会从左至右扫描对象的迭代工具而言都是如此,这些迭代工具包括了for循环、列表解析、in成员关系测试以及map内置函数等。
“可迭代对象”的概念在Python中是相当新颖的,基本这就是序列观念的通用化:如果对象时实际保存的序列,或者可以再迭代工具环境中一次产生一个结果的对象,那就看做是可迭代的。
>>文件迭代器
作为内置数据类型的文件也是可迭代的,它有一个名为__next__的方法,每次调用时,就会返回文件中的下一行。当到达文件末尾时,__next__会引发内置的StopIteration异常,而不是返回空字符串。
这个接口就是Python中所谓的迭代协议:有__next__方法的对象会前进到下一个结果,而在一系列结果的末尾时,则会引发StopIteration。任何这类对象都认为是可迭代的。任何这类对象也能以for循环或其他迭代工具遍历,因为所有迭代工具内部工作起来都是在每次迭代中调用__next__,并且捕捉StopIteratin异常来确定何时离开。
Python 迭代器和列表解析
1)迭代器
一种特殊的数据结构,以对象形式存在 >>> i1 = l1.__iter__() >>> i1 = iter(l1) 可迭代对象: 序列: list、str、tuple 非序列: dict、file 自定义类: __iter__()、 __getitem__() 注意: 若要实现迭代器,需要在类中定义next()方法 要使迭代器指向下一个对象,则使用成员函数 next() i1.next() 当没有元素时,会引发StopIteration异常 for循环可用于任何可迭代对象 例: >>> l1 = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] >>> i1 = l1.__iter__() >>> il.next() 'Sun' >>> il.next() 'Mon'
2)列表解析 [ ]
根据已有列表,高效生产新列表的方式。 常用于实现创建新的列表,因此要放置于 [ ] 中 语法: [ expression for iter_var in iterable ] [ expression for iter_var in iterable if cond_expr ] os模块中 listdir() 能够列出所有文件 例:事先定义l1 l2 l1 = [ 1,2,3,4,5 ] l2=[ ] >>> for i in l1: l2.append(i**2) l2列表内各项为l1的平方 >>> print l2 [1, 4, 9, 16, 25] >>> l3 = [ i**2 for i in l1 ] l3列表内各项为l1的平方 [1, 4, 9, 16, 25] >>> l4 = [ i**2 for i in l1 if i>=3 ] l3列表内各项为l1中 >= 3的平方 [9, 16, 25] 例题: l1 = ['x','y','z'] l2 = [1,2,3] 应用列表解析方法使其各项相乘 >>> l3 = [ (i,j) for i in l1 for j in l2 ] for循环内部嵌套一个for循环实现各项乘 [('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)]
3)生成器 ( )
惰性计算、延迟求值 生成器表达式并不真正创建数字列表,而是返回一个生成器对象,此对象在每次计算出一个条目后,把这个条目产生出来(一次返回一个值) 语法: ( expr for iter_var in iterable ) ( expr for iter_var in iterable if cond_expr ) 例: >>> l1 = ( i**2 for i in range(2,11,2)) >>> l1.next() 2 >>> l1 = ( i**2 for i in range(2,11) if i%2==0 ) >>> l1.next() 2 注意: 序列过长,并且每次只获取一个元素时,应当考虑使用生成器表达式而不是列表解析 列表解析与生成器的关系相当于range()与xrange()
4)产生偏移和元素
enumerate 同时偏移缩印和偏移元素,使用enumerate()函数 此内置函数返回一个生成器对象 >>> S = 'Hello,world' >>> a = enumerate(S) >>> a.next() (0,'H') >>> a.next() (1,'e')
Atas ialah kandungan terperinci Python中迭代器和列表解析怎么使用?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Apakah kelebihan dan kekurangan templat?

Google AI mengumumkan Gemini 1.5 Pro dan Gemma 2 untuk pembangun

Dengan hanya $250, pengarah teknikal Hugging Face mengajar anda cara memperhalusi Llama 3

Kongsi beberapa rangka kerja projek berkaitan AI dan LLM sumber terbuka .NET

Panduan lengkap untuk penyahpepijatan dan analisis fungsi golang

Bagaimana anda bertanya kepadanya Deepseek

Bagaimana untuk menyimpan fungsi menilai
