Python之切片和迭代

对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 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。

  1. 有序集合:list,tuple,str和unicode;
  2. 无序集合:set
  3. 无序集合并且具有 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)]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值