对list进行切片
L = ['A', 'B', 'C', 'D']
L[0:3]表示取前三个元素,当从索引0开始取的时候,0可以省略,写作为L[:3]。
L[:]表示从头到尾。
L[1:10:2]表示从索引号为1的开始到索引号为10的结束,不包括索引号为10的元素,每2个取出一个,即隔一个取一个。tuple切片与list相同。
range()可以创建一个数列:
range(1, 101)
# [1, 2, 3, ..., 100]
倒叙切片
L = ['A', 'B', 'C', 'D']
L[-2:]
# 输出结果 ['C','D']
L[:-2]
# 输出结果 ['A','B']
L[-3:-1]
# 输出结果 ['B','C']
L[-4:-1:2]
# 输出结果 ['A','C']
倒数第一个元素的索引是-1。倒序切片包含起始索引,不包含结束索引。
字符串切片
字符串 'xxx’和 Unicode字符串 u’xxx’也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串。操作方法与上述相同。
upper()函数可以把字符变成大写字母。
'abc'.upper()
# 'ABC'
迭代
Python中,迭代是通过 for … in 来完成的,即for循环。for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。
如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。
- 有序集合:list,tuple,str和unicode;
- 无序集合:set
- 无序集合并且具有 key-value 对:dict
索引迭代
取出元素的索引号用enumerate() 函数:
L = ['A', 'B', 'C', 'D']
for index, name in enumerate(L):
print index, '-', name
输出结果为:
0 - A
1 - B
2 - C
3 - D
其实enumerate() 函数是把
['A','B','C','D']
变成了
[(0,'A'),(1,'B'),(2,'C'),(3,'D')]
即把每一个元素变成了一个个的tuple,tuple返回赋值的原理之前说过了,现在不做解释了。
zip()函数可以把两个list变成一个list:
zip([10, 20, 30], ['A', 'B', 'C'])
# 操作之后的list [(10, 'A'), (20, 'B'), (30, 'C')]
迭代的dict的value
迭代 dict 对象的value: values() 方法和itervalues() 方法。
两种方法效果一样,但是 values() 方法实际上把一个 dict 转换成了包含 value 的list, itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
d = { 'A': 95, 'L': 85, 'B': 59 }
print d.values()
# [85, 95, 59]
迭代的key和value
同时迭代 key和value: items() 方法和iteritems()方法。
iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
print d.items()
# [('Lisa', 85), ('Adam', 95), ('Bart', 59)]