Chinaunix首页 | 论坛 | 博客
  • 博客访问: 734630
  • 博文数量: 109
  • 博客积分: 1751
  • 博客等级: 上尉
  • 技术积分: 1816
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-31 22:37
文章分类

全部博文(109)

文章存档

2014年(9)

2013年(21)

2012年(48)

2011年(31)

分类: Python/Ruby

2012-02-06 16:33:11

在python中,数据访问模型分为三种,直接存取,序列和映射
对于非容器类的数据类型,都属于直接存取访问;序列的典型代表:tuple, list, string, unicode string, buffer, xrange;映射的典型代表:dict。

Python还有一种叫做容器的数据结构。容器是包含其他对象的任意对象。序列(如元组和列表)和映射(比如字典)就是两类主要的容器。

序列的每个元素有自己的编号(元组可以作为字典的键名),而映射的每个元素则有一个自己的名字(键)。另外还有种容器类型既不是序列也不是映射,叫做集合。


I, 序列的通用操作
1, 索引index
  1. seq = 'sample'
  2. print seq[1]
  3. # a
  4. print seq[-1]
  5. # e
2, 切片slice
  1. seq = 'sample'
  2. print seq[1:4]
  3. # amp
  4. print seq[:]
  5. # sample
注意,上面的操作都省略了步长。
  1. print seq[1:4:2]
  2. # ap
注意下面的用法
  1. print seq[::-1]
  2. #elpmas
这样就完成字符串的翻转

3, 相加
  1. seq1 = 'abcd'
  2. seq2 = ''dfgh
  3. print seq1 + seq2
  4. # abcddfgh
4, 相乘
  1. seq = 'abcd'
  2. print seq*2
  3. # abcdabcd
5, 成员资格
  1. seq = 'abcd'
  2. 'bcd' in seq
  3. # True
II, 序列的通用操作函数
1, len 
返回序列的长度
  1. seq = 'abcd'
  2. print len(seq)
  3. # 4
2, max, min
返回序列中的最大成员和最小成员
  1. seq = 'abcd'
  2. print max(seq)
  3. print min(seq)
  4. # d
  5. # a
4, sorted
对序列进行排序,返回一个新的序列
  1. Help on built-in function sorted in module __builtin__:

  2. sorted(...)
  3.     sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
该函数是__builtin__中的通用函数。
示例1:对字符串进行排序
  1. seq = 'agde'
  2. print sorted(seq)
  3. # ['a', 'd', 'e', 'g']
示例2:对复杂的list进行排序
  1. la = [[4, 1], [3, 3], [2, 5], [1, 2], [5, 4]]
  2. lsort1 = sorted(la)
  3. lsort2 = sorted(la, key=lambda x:x[1])
  4. lsort3 = sorted(la, cmp=lambda x,y:cmp(x[1], y[1]))
  5. lsort4 = sorted(la, cmp=lambda x,y:cmp(x[1], y[1]), reverse=True)

  6. print(la)
  7. print(lsort1)
  8. print(lsort2)
  9. print(lsort3)
  10. print(lsort4)

  11. # [[4, 1], [3, 3], [2, 5], [1, 2], [5, 4]]
  12. # [[1, 2], [2, 5], [3, 3], [4, 1], [5, 4]]
  13. # [[4, 1], [1, 2], [3, 3], [5, 4], [2, 5]]
  14. # [[4, 1], [1, 2], [3, 3], [5, 4], [2, 5]]
  15. # [[2, 5], [5, 4], [3, 3], [1, 2], [4, 1]]
lsort1没有制定cmp, key, 默认按照list中第一个成员进行排序
lsort2指定key为list中的第二个成员
lsort3指定cmp指教函数为比较list的第二个成员
lsort4使用反转排序
3, sort
上面提到的sorted函数是__builtin__模块中的通用函数,对于不是immutable的序列,如list,内建了sort函数。
示例:
  1. seq = ['a', 'd', 'g', 'b', 'c']
  2. seq.sort()
  3. print seq
  4. # ['a', 'b', 'c', 'e', 'g']
要注意的是,sorted函数返回一个新的list,但是sort函数直接修改了原来的list。
4, map
  1. map(...)
  2.     map(function, sequence[, sequence, ...]) -> list
  3.     
  4.     Return a list of the results of applying the function to the items of
  5.     the argument sequence(s). If more than one sequence is given, the
  6.     function is called with an argument list consisting of the corresponding
  7.     item of each sequence, substituting None for missing values when not all
  8.     sequences have the same length. If the function is None, return a list of
  9.     the items of the sequence (or a list of tuples if more than one sequence).
示例
  1. def func(a):
  2.         return a*2

  3. la = list('abcd')
  4. lmap = map(func, la)
  5. print la
  6. print lmap

  7. # ['a', 'b', 'c', 'd']
  8. # ['aa', 'bb', 'cc', 'dd']
如果使用lambda函数,则可以写得更简单
  1. la = list('abcd')
  2. lmap = map(lambda x:x*2, la)
5, filter
  1. filter(...)
  2.     filter(function or None, sequence) -> list, tuple, or string
  3.     
  4.     Return those items of sequence for which function(item) is true. If
  5.     function is None, return the items that are true. If sequence is a tuple
  6.     or string, return the same type, else return a list.
示例
  1. la = ['abc', 'agd', 'rad', 'ljh']
  2. lfilter = filter(lambda x:'a' in x, la)
  3. print la
  4. print lfilter
上面的例子将不包含字母‘a'的元素过滤掉

6, reduce
  1. reduce(...)
  2.     reduce(function, sequence[, initial]) -> value
  3.     
  4.     Apply a function of two arguments cumulatively to the items of a sequence,
  5.     from left to right, so as to reduce the sequence to a single value.
  6.     For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
  7.     ((((1+2)+3)+4)+5). If initial is present, it is placed before the items
  8.     of the sequence in the calculation, and serves as a default when the
  9.     sequence is empty.
示例
  1. la = ['abc', 'agd', 'rad', 'ljh']
  2. vreduce = reduce(lambda x,y:x+y, la)
  3. print la
  4. print vreduce
  5. # ['abc', 'agd', 'rad', 'ljh']
  6. # abcagdradljh
在上面的例子中,执行了这样的操作:abc与agd相加, 结果再与rad相加,结果再与ljh相加。
上面的例子中永乐lambda,实际上,在这种情况下,可以使用operator。
  1. NAME
  2. operator - Operator interface.
  3. FILE
  4. (built-in)
  5. DESCRIPTION
  6. This module exports a set of functions implemented in C corresponding
  7. to the intrinsic operators of Python. For example, operator.add(x, y)
  8. is equivalent to the expression x+y. The function names are those
  9. used for special methods; variants without leading and trailing
  10. '__' are also provided for convenience.
示例:
  1. import operator

  2. ln = [1, 2, 3, 4]
  3. result = reduce(operator.mul, ln)
在这个例子中,使用operator.mul代替了lambda x,y:x*y。如description,operator.mul(x,y)与x*y

7, reversed
  1. reversed(sequence) -> reverse iterator over values of the sequence
  2. Return a reverse iterator
reversed函数用于将一个序列反转,返回一个iterator。注意,这里并不返回一个序列。所以,如果要使用reversed反转一个序列,应写成:
  1. a = range(10)
  2. b = [x for x in reversed(a)]
8, sum
对序列的所有成员求和。



阅读(1207) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~