迭代与列表生成式、生成器

一、迭代

python中如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:

>>> from collections import Iterable
>>> isinstance(‘abc‘, Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整数是否可迭代
False

Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:



>>> for i, value in enumerate([‘A‘, ‘B‘, ‘C‘]):
...     print i, value
...
0 A
1 B
2 C
>>> for x, y in [(1, 1), (2, 4), (3, 9)]:
...     print x, y
...
1 1
2 4
3 9
>>> d = {‘x‘: ‘A‘, ‘y‘: ‘B‘, ‘z‘: ‘C‘ }
>>> for k, v in d.iteritems():
...     print k, ‘=‘, v
...
y = B
x = A
z = C
 

二、列表生成式


要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用range(1, 11):

>>> range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:

如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:

>>> L = []
>>> for x in range(1, 11):
...    L.append(x * x)
...
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法二是列表生成式:

>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:


>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
 

还可以使用两层循环,可以生成全排列:

>>> [m + n for m in ‘ABC‘ for n in ‘XYZ‘]
[‘AX‘, ‘AY‘, ‘AZ‘, ‘BX‘, ‘BY‘, ‘BZ‘, ‘CX‘, ‘CY‘, ‘CZ‘]

列出当前目录下的所有文件和目录名:

>>> import os>>> [d for d in os.listdir(‘.‘)]# os.listdir可以列出文件和目录[‘DLLs‘, ‘Doc‘, ‘geckodriver-v0.11.1-win64.zip‘, ‘geckodriver.exe‘, ‘include‘, ‘Lib‘, ‘libs‘, ‘pip-8.1.2‘, ‘pip-8.1.2.tar.gz‘, ‘python.exe‘, ‘python2.7.exe‘, ‘python2.exe‘, ‘pythonw.exe‘, ‘pythonw2.7.exe‘, ‘pythonw2.exe‘, ‘Scripts‘, ‘selenium‘, ‘setuptools-28.7.1‘, ‘setuptools-28.7.1.zip‘, ‘tcl‘, ‘Tools‘, ‘w9xpopen.exe‘]

列表生成式也可以使用两个变量来生成list:


>>> d = {‘x‘: ‘A‘, ‘y‘: ‘B‘, ‘z‘: ‘C‘ }
>>> [k + ‘=‘ + v for k, v in d.iteritems()]
[‘y=B‘, ‘x=A‘, ‘z=C‘]

三、生成器



在Python中,一边循环一边计算的的机制称为生成器(Generator)
1.创建Generator,只要把一个列表生成式的[]改成(),如下:
>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x104feab40>

2.打印Generator的元素,可以通过generator的next()方法
>>> g.next()
0
>>> g.next()
1
>>> g.next()
4
>>> g.next()
9
>>> g.next()
16
>>> g.next()
25
>>> g.next()
36
>>> g.next()
49
>>> g.next()
64
>>> g.next()
81
>>> g.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

generator保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误,

还可使用for循环,因为generator也是可迭代对象,如下:
>>> g = (x * x for x in range(10))
>>> for n in g:
...     print n
...
0
1
4
9
16
25
36
49
64
81
 
 
 
时间: 2024-11-03 22:20:23

迭代与列表生成式、生成器的相关文章

Python的高级特性之切片、迭代、列表生成式、生成器

切片 切片就是获取一个list.tuple.字符串等的部分元素 1 l = range(100) 2 #取[0,5)元素 3 print(l[:5]) #[0, 1, 2, 3, 4] 4 #在[0,99]中每隔10个元素取一个 5 print( l[::10]) #[0, 10, 20, 30, 40, 50, 60, 70, 80, 90] 6 #取最后五个元素 7 print( l[-5 : ]) #[95, 96, 97, 98, 99] 8 9 str = "www.genekang.

python迭代、列表生成式

迭代: 迭代对象(Iterable),可以直接作用于for循环的对象,如list / tuple / dict / set / str /等集合数据类型可以直接作用于for循环 >>> spam={1:'A',2:'B',3:'C'} >>> for x in spam: #默认情况下,dict迭代的是key print x 1 2 3 >>> for value in spam.values(): #values():迭代value print va

python的高级特性:切片,迭代,列表生成式,生成器,迭代器

1 #演示切片 2 k="abcdefghijklmnopqrstuvwxyz" 3 #取前5个元素 4 k[0:5] 5 k[:5] 6 #后5个元素 7 k[-5:] #vwxyz 8 #每隔一个取一个 9 k[::2] #acegikmoqsuwy 10 #原样复制一个 11 k[:] 12 13 #演示迭代 14 d={'a':1,'b':2,'c':3} 15 for key in d: 16 print(key) 17 #结果输出abc, 即输出key, 而且要注意dict

python列表生成式&amp;生成器&amp;迭代器

一.列表生成式 什么是列表生成式? 列表生成式是快速生成列表的一种方式.(貌似有些废话) 更专业点的说法:列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 在python2.7里 举个例子,要生成list [1,2,3,4,5],可以用range(1,6) >>> range(1,6) [1, 2, 3, 4, 5] 但是如果要生成[1x1,2x2,3x3,4x4,5x5]怎么做呢? 普通青年做法: >>&

s14 第4天 关于python3.0编码 函数式编程 装饰器 列表生成式 生成器 内置方法

python3 编码默认为unicode,unicode和utf-8都是默认支持中文的. 如果要python3的编码改为utf-8,则或者在一开始就声明全局使用utf-8 #_*_coding:utf-8_*_ 或者将字符串单独声明: a = "中文".encode("utf-8") 函数式编程 函数式编程中的函数指代的是数学中的函数. 函数式编程输入如果确定,则输出一定是确定的.函数中并没有很多逻辑运算 python是一个面向对象的语言,只是一部分支持函数式编程.

列表生成式,生成器

一.列表生成式 二.生成器 斐波那契数列可以用生成器来实现. 参见:廖雪峰的生成器的教程 原文地址:https://www.cnblogs.com/zhizihuakai66/p/8877315.html

列表生成式&amp;生成器表达式

一.列表生成式 def func(): return [lambda x:i*x for i in range(4)] print([j(2) for j in func()]) 结果:[6,6,6,6] 二.生成器表达式 def func(): return (lambda x:i*x for i in range(4)) print([j(2) for j in func()]) 结果:[0,2,4,6] 原文地址:https://www.cnblogs.com/gpd-Amos/p/899

5.1.24 Python之列表生成式、生成器、可迭代对象与迭代器

语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterable.Iterator与Generator之间的关系 一.语法糖的概念 "语法糖",从字面上看应该是一种语法."糖",可以理解为简单.简洁.其实我们也已经意识到,没有这些被称为"语法糖"的语法,我们也能实现相应的功能,而 "语法糖"使我们可以更加简洁.快速的实现这些功能. 只是Python解释器会把这

7.5-7.6 列表生成式和生成器以及区别

一.列表生成式是 python 受欢迎的语法之一 通过一句简洁的语法就可以对一组元素进行过滤 还可以对得到的元素进行转换处理. li = [x + x for x in range(1, 101) if x % 2 == 0] print(li) def funa(x):     a=[]     for x in range(1, 101):         if x % 2 == 0:             a.append(x+x)     return a print(funa(1))