说
编程,写
编程,可是到现在 ,我倒觉得数据结构要挂科了。应试教育害死人,没有办法,挂了就挂了吧,不过为了以后,还是得好好复习,话说以后可能有用的。首先是树和图,在后面好像说要看看这些东西,慢慢来。
继续今天的课程。说了这么多的迭代,没有怎么仔细说过这个词语的意思,查了字典,这个词语就是循环的意思,它是一个动词,一直往返运行。
1.并行迭代
意思就是可以同时迭代两个序列。
names=['wang','du','li','lei']
ages=[12,23,42,22]
for i in range(len(names)):
print names[i], 'is' ,ages[i], 'year old'
wang is 12 year old
du is 23 year old
li is 42 year old
lei is 22 year old
这里有一个zip函数,就是压缩的意思,可以把两个序列合并到一起,形成一个列表
>>>zip(names,ages)
[('wang',12),('du',23),('li',42),('lei',22)]
他也可以用于任意多的序列,
>>>zip(range(5),xrange(1000))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
上面中,不推荐在第二个里面使用range,因为这个会一直计算到1000,而xrange不会,他只计算前面的五个。
2.编号迭代
有时候要想迭代序列中的对象,同时还要获取当前对象的索引。关于这个索引,在序列中讲的是得出其元素,并且给出他的位置。例如,在一个字符串中替换所有包含‘xxx’的字符串,实现的方法有很多。
index=0
for string in strings:
if 'xxx' in string:
string[index]='[censored]'
index+=1
这个认真想一下,还是可以理解的,‘xxx‘是字符串,当时我想为什么不是直接就是if 'xxx' in string ,如果这样的话,就无法执行循环了。
还有一个使用内建函数的。
for index.string in enumerate(strings):
if 'xxx' in string:
string[index]='[censored]'
这个内建函数可以在提供索引的地方迭代 索引-值 对。
这个不懂,标记。
3.翻转和排序迭代
先看两个函数sorted和reversed,他们和列表里的reverse和sort方法一样,但是作用于任何序列或可迭代的对象上面,不是原地修改对象,而是返回翻转或者排序后的版本。
>>> sorted('hello,world')
[',', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
>>> reserved('hello,world')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'reserved' is not defined
>>> reversed('hello,world')
<reversed object at 0x950066c>
上面那个排序的返回了一个列表,但是这个翻转的却是那么一堆,还记得这个是神马东西么?对象,这个是说过一点的对象。具体是为什么,教材没有说,应该有点复杂。
在序列中也可以通过序列的分片来翻转,例如x=range(10)[::-1]
继续今天的课程。说了这么多的迭代,没有怎么仔细说过这个词语的意思,查了字典,这个词语就是循环的意思,它是一个动词,一直往返运行。
1.并行迭代
意思就是可以同时迭代两个序列。
names=['wang','du','li','lei']
ages=[12,23,42,22]
for i in range(len(names)):
print names[i], 'is' ,ages[i], 'year old'
wang is 12 year old
du is 23 year old
li is 42 year old
lei is 22 year old
这里有一个zip函数,就是压缩的意思,可以把两个序列合并到一起,形成一个列表
>>>zip(names,ages)
[('wang',12),('du',23),('li',42),('lei',22)]
他也可以用于任意多的序列,
>>>zip(range(5),xrange(1000))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
上面中,不推荐在第二个里面使用range,因为这个会一直计算到1000,而xrange不会,他只计算前面的五个。
2.编号迭代
有时候要想迭代序列中的对象,同时还要获取当前对象的索引。关于这个索引,在序列中讲的是得出其元素,并且给出他的位置。例如,在一个字符串中替换所有包含‘xxx’的字符串,实现的方法有很多。
index=0
for string in strings:
if 'xxx' in string:
string[index]='[censored]'
index+=1
这个认真想一下,还是可以理解的,‘xxx‘是字符串,当时我想为什么不是直接就是if 'xxx' in string ,如果这样的话,就无法执行循环了。
还有一个使用内建函数的。
for index.string in enumerate(strings):
if 'xxx' in string:
string[index]='[censored]'
这个内建函数可以在提供索引的地方迭代 索引-值 对。
这个不懂,标记。
3.翻转和排序迭代
先看两个函数sorted和reversed,他们和列表里的reverse和sort方法一样,但是作用于任何序列或可迭代的对象上面,不是原地修改对象,而是返回翻转或者排序后的版本。
>>> sorted('hello,world')
[',', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
>>> reserved('hello,world')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'reserved' is not defined
>>> reversed('hello,world')
<reversed object at 0x950066c>
上面那个排序的返回了一个列表,但是这个翻转的却是那么一堆,还记得这个是神马东西么?对象,这个是说过一点的对象。具体是为什么,教材没有说,应该有点复杂。
在序列中也可以通过序列的分片来翻转,例如x=range(10)[::-1]