Python基础(三)

切片

只用一个 : ,表示从头至尾:

>>> L[:]
['Adam', 'Lisa', 'Bart', 'Paul']

切片操做还能够指定第三个参数:第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个。

把list换成tuple,切片操做彻底相同,只是切片的结果也变成了tuple。python

迭代

迭代操做就是对于一个集合,不管该集合是有序仍是无序,咱们用 for 循环老是能够依次取出集合的每个元素。数据结构

*注意: 集合是指包含一组元素的数据结构,咱们已经介绍的包括:

1 有序集合:list,tuple,str和unicode;

2 无序集合:set;

3 无序集合而且具备 key-value 对:dict;

例题:请用for循环迭代数列 1-100 并打印出7的倍数。

for i in range(1, 100)[6::7]:
    print i

Python中,迭代永远是取出元素自己,而非元素的索引。

想要取出索引要用enumerate() 函数

>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> for index, name in enumerate(L):
...     print index, '-', name
... 
0 - Adam
1 - Lisa
2 - Bart
3 - Paul

enumerate() 函数把:
['Adam', 'Lisa', 'Bart', 'Paul']
变成了相似:
[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]
所以,迭代的每个元素其实是一个tuple:app

for t in enumerate(L):
    index = t[0]
    name = t[1]
    print index, '-', name

索引迭代也不是真的按索引访问,而是由 enumerate() 函数自动把每一个元素变成 (index, element) 这样的tuple,再迭代,就同时得到了索引和元素自己。函数

  1. values() 方法实际上把一个 dict 转换成了包含 value 的list。code

  2. 可是 itervalues() 方法不会转换,它会在迭代过程当中依次从 dict 中取出 value,因此 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。对象

  3. 打印 itervalues() 发现它返回一个 对象,这说明在Python中,for 循环可做用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象均可以做用于for循环,而内部如何迭代咱们一般并不用关心。 索引

若是一个对象说本身可迭代,那咱们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操做,它不对迭代对象内部的数据有任何要求。内存

利用 3 层for循环的列表生成式,找出对称的 3 位数。例如,121 就是对称数,由于从右到左倒过来仍是 121。

注意三种方法的思想element

L=[]
for x in range(1,10):
    for y in range(10):
        for z in range(1,10):
            if x==z :
                L.append(100*x+10*y+z)
print L

print [100 * x + 10 * y + z for x in range(1, 10) for y in range(10) for z in range(10) if x==z]

print [x for x in range(100,1000) if str(x)[0]==str(x)[-1]]
相关文章
相关标签/搜索