Chinaunix首页 | 论坛 | 博客
  • 博客访问: 248205
  • 博文数量: 44
  • 博客积分: 1052
  • 博客等级: 少尉
  • 技术积分: 742
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-17 16:51
文章分类

全部博文(44)

文章存档

2013年(7)

2012年(14)

2011年(23)

分类: Python/Ruby

2011-08-03 21:55:08

列表为容器存储,可变类型,顺序访问。
列表中的元素可以为任意对象,而且各个元素可以为不同对象。

创建列表
  1. >>> a = []
  2. >>> a
  3. []                                                # 空列表
  4. >>> b = [1,2,'ab',a]
  5. >>>
  6. [1, 2, 'ab', []]                                  # 列表元素可以为不同对象
  7. >>> list('fxxkGFW')
  8. ['f', 'x', 'x', 'k', 'G', 'F', 'W']               # 可以用工厂函数list来创建列表
  9. >>> list(('hi', 'ha'))                            # 将一个元组创建为列表
  10. ['hi', 'ha']
  11. >>>

访问与更新列表
切片方式访问。

删除列表
  1. >>> b = [1, 2, 'ab', a]
  2. >>> del b[3]                               # 删除列表元素
  3. >>> b
  4. [1, 2, 'ab']
  5. >>> del b                                  # 删除列表
  6. >>> b
  7. Traceback (most recent call last):
  8.   File "", line 1, in <module>
  9. NameError: name 'b' is not defined
  10. >>>

操作符

标准类型操作符
关系操作符,逻辑操作符

序列类型操作符
切片操作符([],[:]) 成员关系(in,not in) 连接操作符(+) 重复操作符(*)
  1. >>> a = [3.2, 1.3j, ['a', 223], 3e-10]
  2. >>> a
  3. [3.2000000000000002, 1.3j, ['a', 223], 3e-10]
  4. >>> 'a' in a
  5. False
  6. >>> 'a' in a[2]                    # 成员关系操作,判断元素是否在列表中
  7. True
  8. >>> a+a[2]                       # 连接操作符+, 连接两个列表
  9. [3.2000000000000002, 1.3j, ['a', 223], 3e-10, 'a', 223]
  10. >>> a                              # 上面的连接操作没有改变a的值
  11. [3.2000000000000002, 1.3j, ['a', 223], 3e-10]
  12. >>> a+'hello'                    # 连接操作只能在同类型中进行
  13. Traceback (most recent call last):
  14.   File "", line 1, in <module>
  15. TypeError: can only concatenate list (not "str") to list
  16. >>> [3,'a'] * 3                    # 重复操作符,性质与连接操作符类似
  17. [3, 'a', 3, 'a', 3, 'a']
列表类型操作符,列表解析
Python中没有专用于列表的操作符。

内建函数
标准类型内建函数
cmp()
列表的元素可以包含任意类型的对象,因此比较操作比较复杂。
1:对两个列表的元素进行比较
2:若两个元素类型相同,则比较其值,结果不等,则返回结果
3:若两个元素类型不同,则检测是否都为数字
   i)是,则按数字比较的规则比较
  ii)一个为数字,则非数字的元素“大”,(数字是“最小的”)
 iii)都不为数字,则比较两个元素的类型的名字,即比较两个名字的字符串
4:如果一个列表首先达到末尾,则另一个列表“大”
5:如果所有元素都比较完,而且每个元素都相等,则两个列表相等,返回0.

序列类型内建函数
len() : 返回列表元素个数
min(), max():返回最小和最大的元素
sorted():将列表元素排序后输出,并不改变原列表    返回列表
reversed():将列表中元素逆序输出,并不改变原列表    返回迭代器
numerate():返回迭代器
zip():返回列表
sum()
list(), tuple()

列表类型的内建方法  (突然觉得这里用内建方法的说法会更准确)
此即列表的方法了,用object.attribute的方式访问。
可以用dir(obj)的方法来查看相应对象的方法和属性
list.append(obj)                  像列表中添加元素
list.count(obj)                   返回对象obj在列表中出现的次数
list.extend(seq)                  将一个序列seq添加到列表中
list.index(obj, i=0,j=len(list))  返回list[k] == obj的k值,即obj在list中的位置。
list.insert(index, obj)           在index的位置插入对象obj
list.pop(index=-1)                删除并返回指定位置的对象,默认为最后一个。
list.remove(obj)                  删除对象obj
list.reverse()                    原地翻转列表
list.sort(cmp=None,key=None,reverse=False) 以指定方式排序列表成员

书上有两个例子,用列表来实现堆栈和列表。我简单写了个,如下:
     
  1. #!/usr/bin/env python

  2. def push(stack, obj):
  3.     stack.append(obj);

  4. def pop(stack):
  5.     if not isempty(stack):
  6.         return stack.pop()
  7.     else:
  8.         print "pop: stack empty!"

  9. def isempty(stack):
  10.     return not bool(stack)

  11. def test_stack():
  12.     stack = []
  13.     push(stack, 1);
  14.     push(stack, 2);
  15.     print stack
  16.     pop(stack)
  17.     print stack
  18.     print pop(stack)
  19.     print isempty(stack)

  20. def enQueue(queue, obj):
  21.     queue.append(obj)

  22. def delQueue(queue):
  23.     if not isemptyQ(queue):
  24.         return queue.pop(0);
  25.     else:
  26.         print "delQueue: queue empty!"

  27. def isemptyQ(queue):
  28.     return not bool(queue)

  29. def testQueue():
  30.     queue = []
  31.     enQueue(queue, 'a')
  32.     enQueue(queue, 'b')
  33.     enQueue(queue, 'c')
  34.     print queue
  35.     print delQueue(queue)
  36.     print isemptyQ(queue)

  37. if __name__ == '__main__':
  38.     test_stack()
  39.     print 'queue\n'
  40.     testQueue()
写这玩意还是要有实例,每次应该加个完整的程序进来。   
这书到是挺好,各种操作符,各种内建函数都区分的很清楚。以前没发现。
阅读(2227) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~