迭代
首先理解下什么是迭代,python中所有从左往右扫面对象的方式都是可迭代的
有哪些方式是可迭代的:
1.文件操作
我们读取文件的时候,会用到一个readline()方法,其实它就是一个迭代器,它会返回当前的数据,然后自动的调用内置的next()方法来让文件的读取头自动的移动到当前的下面一行,准备下次的读取,到达文件末尾时,就会返回空字符串.
>>> f=open('hello.py') >>> f.readline() '#!/usr/bin/python2.5\n' >>> f.readline() 'print "hello.word!"\n' >>> f.readline() '\n' >>> f.readline() '' >>> for i in open('hello.py'): ... print(i) ... #!/usr/bin/python2.5 print "hello.word!"
用上面这样方式来读取文件内容的话,速度很快,内存占用也比较低,特别适合操作大文件.
下面这个方式适合操作一些小的文件,速度和效率没有上面的好,所以建议以后操作文件的话,尽量用上面的。
>>> for i in open('hello.py').readlines(): ... print i ... #!/usr/bin/python2.5 print "hello.word!"
read方法和readline方法,
read()方法把整个文件的内容放到字符串里
readline()方法则把文件的内容按照行为单位放到列表里。
一般要替换文件里的某个字符的话,最好有readline,然后用循环把一行一行内容循环出来,再查找替换,这样效率比整个读到一个字符串里来查找匹配效果更高。
2 for循环
例如:
>>> for i in range(5): ... print(i) ...
它中间处理的过程和下面的是一样的:
>>> L=[0,1,2,3,4] >>> I=iter(L) >>> I.next() 0 >>> I.next() 1 >>> I.next() 2 >>> I.next() 3 >>> I.next() 4 >>> I.next()
Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
每次调用迭代器调用next()方法返回结果,并让文件指针往下移动一行,最后已StopIteration异常结束迭代。
3.列表解析:
相比python for循环速度会快很多
例如:
>>> L=[x+10 for x in range(10)] >>> L
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
python会在解释器里对range(10)进行迭代,依次把列表里的内容取出来,赋值给最左边的x,然后执行x+10的操作,
并且把执行好的结果保存在列表里。等range(10)迭代完以后就新生成了一个列表,结果就是[10,11,12,13,14,15,16,17,18,19]
从上面可以看出,这也是建立python 列表的一个方法。
上面例子也可以用for循环来实现.
>>> res=[] >>> for x in range(10): ... res.append(x+10) ... >>> res [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
从上面可以看出,python列表解析比手动的for 更加精简,而且运行的更快(往往速度回快一倍),因为他们的迭代在解析器内部是以C语言的速度执行的,而不是以手动python代码执行的,特别对于较大的数据集合,这是使用列表解析的一个主要的性能优点.
遍历
1.通过序列取元素的方法进行遍历
root@10.1.6.200:python# vim 3.py
#!/usr/bin/python2.5 for i in 'hello': #序列里的字符串 print i, y = [1,2,3,4,5,6] #列表 for i in y: print i,
root@10.1.6.200:python# python 3.py
h e l l o 1 2 3 4 5 6
2.通过序列本身偏移指数(索引)的方法进行遍历
也就是迭代序列索引,注:迭代,重复执行一条指令.
root@10.1.6.200:python# vim 3.py
#!/usr/bin/python2.5 x='hello' for i in range(len(x)): print x[i] y = [1,2,3,4,5,6] for i in range(len(y)): print y[i],
root@10.1.6.200:python# python 3.py
h e l l o 1 2 3 4 5 6
字典有2种方式取到其值:
1.先取字典key,在取索引的值
root@10.1.6.200:python# vim 5.py
#!/usr/bin/python2.5 z = {1:'a',2:'b',3:'c'} for i in z: print z[i]
root@10.1.6.200:python# python 5.py
a b c
2.通过字典items方法,获取所有键值对,在利用元组拆分的方法获得对应值.
root@10.1.6.200:python# cat 5.py
#!/usr/bin/python2.5 z = {1:'a',2:'b',3:'c'} print z.items() for m,n in z.items(): print m,n
root@10.1.6.200:python# python 5.py
[(1, 'a'), (2, 'b'), (3, 'c')] 1 a 2 b 3 c
本文向大家介绍举例讲解Python中is和id的用法,包括了举例讲解Python中is和id的用法的使用技巧和注意事项,需要的朋友参考一下 (ob1 is ob2) 等价于 (id(ob1) == id(ob2)) 首先id函数可以获得对象的内存地址,如果两个对象的内存地址是一样的,那么这两个对象肯定是一个对象。和is是等价的。Python源代码为证。 但是请看下边代码的这种情况怎么会出现呢?
问题内容: 对于C ++,我们可以使用OpenMP进行并行编程。但是,OpenMP不适用于Python。如果要并行执行python程序的某些部分,该怎么办? 该代码的结构可以认为是: 其中和是两个独立的功能。为了减少运行时间,如何并行而不是按顺序运行这种代码?代码是: 其中和是两个独立的功能。那是我要平行的地方… 问题答案: 您可以使用多处理模块。对于这种情况,我可以使用一个处理池: 这将产生可以
其中和是两个独立的函数。那就是我想平行的地方...
问题内容: 我有一个DataFrame熊猫来的: 输出: 现在,我要遍历该框架的行。对于每一行,我希望能够通过列名访问其元素(单元格中的值)。例如: pandas有可能这样做吗? 我发现了类似的问题。但这并不能给我我所需的答案。例如,建议在那里使用: 要么 但是我不了解对象是什么以及如何使用它。 问题答案: DataFrame.iterrows是产生索引和行的生成器
本文向大家介绍实例代码讲解Python 线程池,包括了实例代码讲解Python 线程池的使用技巧和注意事项,需要的朋友参考一下 大家都知道当任务过多,任务量过大时如果想提高效率的一个最简单的方法就是用多线程去处理,比如爬取上万个网页中的特定数据,以及将爬取数据和清洗数据的工作交给不同的线程去处理,也就是生产者消费者模式,都是典型的多线程使用场景。 那是不是意味着线程数量越多,程序的执行效率就越快呢
本文向大家介绍举例讲解Swift编程中switch...case语句的用法,包括了举例讲解Swift编程中switch...case语句的用法的使用技巧和注意事项,需要的朋友参考一下 Switch作为选择结构中必不可少的语句也被加入到了Swift中,只要有过编程经验的人对Switch语句都不会感到陌生,但苹果对Switch进行了大大的增强,使其拥有其他语言中没有的特性。使用Switch语句很简单: