#!/usr/bin/env python
# -*- coding=utf-8 -*-
#########################################################################
# File Name: data_struct.py
# Author: jphome
# mail: jphome98@gmail.com
# Created Time: Fri 06 Sep 2013 10:16:51 PM CST
#########################################################################

字符串

  • 单引号’
  • 双引号”
  • 三引号”‘或”“” ###< 可以多行,中间可以使用’和”

    转义 ‘What\’s ‘ ‘your name?’ ==> ‘What\’s your name?’
name = 'Swaroop';
if name.startswith('Swa'):
    print 'xxx';
if 'a' in name:
    print 'xxx';
if name.find('war') != -1:
    print 'xxx';
delimiter = '_*_';
mylist = ['B', 'R', 'I', 'C'];
print delimiter.join(mylist);   ###< B_*_R_*_I_*_C

列表list

列表可修改
list = ['apple', 'mango'];
print list;                 ###< 打印 ['apple', 'mango']
len(list);                  ###< item个数
for item in list:           ###< 遍历list
    print item;
list.append('rice');        ###< 添加item
list.sort();                ###< 排序list
olditem = list[0];          ###< 提取item
del list[0];                ###< 删除item

list.extend(L);             ###< 用链表来扩充链表
                            ###< 相当于list[len(list):] = L
list.remove(x);             ###< 移除值为x的元素
list.pop(3);                ###< 
list.pop();                 ###< 弹出最后一个元素
list.index(x);              ###< 返回列表中第一个值为x的索引
list.count(x);              ###< 返回x在列表中出现的次数
list.reverse();             ###< 列表逆序

堆栈stack

stack = [];
stack.append(3);
stack.pop();

队列queue

queue = [];
queue.append(4);
queue.pop(0);

列表综合

listone = [2, 3, 4];
listtwo = [2*i for i in listone if i>2];    ###< [6, 8]

列表切片

a = [0,1,2,3,4,5,6,7,8,9];
a[2:4];                         ###< a[2]-a[3]
a[:3];                          ###< a[0]-a[2]
a[1:6:2];                       ###< a[1] a[3] a[5] 步进为2
a[i:j:s];                       ###< i默认为-1,j默认为-len(a)-1
a[::-1];                        ###< a[-1:-len(a)-1:-1] 其实就是列表逆转

元组

元组不可变,无法修改
empty = ();                     ###< 空元组
singleton = (2, );              ###< 单元素的元组,必须加,

zoo = ('wolf', 'elephant');
print zoo;                      ###< 打印 ('wolf', 'elephant')
len(zoo);                       ###< item个数
new_zoo = (zoo, 'monkey');      ###< 转移
print new_zoo;                  ###< (('wolf', 'elephant'), 'monkey')
print new_zoo[0][0];            ###< wolf
# print格式化输出
age = 22;
name = 'jph';
print '%s is %d years old' % (name, age);           ###< 使用元组定制字符串
print '%s is playing python' % name;                ###< 只需要一个参数时可以不加()

字典dict

键值对,键必须唯一
只能使用不可变的对象(比如字符串)作为键
形式: d = {key1:val1, key2:val2};
dict = {
    'j' : "jj",
    'p' : 'pp',
    'h' : 'hh'
};
dict['j'] = 'jb';                           ###< 修改item
del dict['p'];                              ###< 删除item
len(dict);                                  ###< item个数
keys = dict.keys();
vals = dict.values();
xxx = dict.get('a', "a_default_val");       ###< 查找'a'对应的val,没有则返回"a_default_val"
for key, val in dict.items():               ###< 遍历dict
    print 'Contact %s => %s' % (key, val);
if 'j' in dict:                             ###< 判断是否存在key
    print "j's val is %s" % dict['j'];
if dict.has_key('j'):                       ###< 判断是否存在key
    print "j's val is %s" % dict['j'];

序列

列表,元组,字符串都是序列
序列的 索引操作符 & 切片操作符 (index & slicing)
list = ['apple', 'mango', 'banana', 'pan'];
list[0];                    ###< 访问第一个item
list[-1];                   ###< 访问最后一个item
list[-2];                   ###< 访问倒数第二个item
list[1:2];                  ###< 切片 [1]
list[:3];                   ###< 从头到[2]
list[2:];                   ###< [2]到尾

参考

即变量名,指向对象存储的内存
list = ['a', 'b', 'c'];
mylist1 = list;                 ###< 别名
mylist2 = list[:];              ###< 切片拷贝
del mylist1[0];                 ###< 会影响到list
del mylist2[0];                 ###< 不会影响到list

集合set

s = set('ab');                  ###< set(['a', 'b'])
len(s);
if 'a' in s:
if 'c' not in s:
if s.issubset(ss):              ###< 判断是否s为ss的子集
if s <= ss:                     ###< 判断是否s为ss的子集
if ss.issuperset(s):            ###< 判断是否ss为ss的超集
if ss >= s:                     ###< 判断是否ss为ss的超集
u = s.union(t);                 ###< 返回并集
u = s | t;                      ###< 返回并集
a = s.intersection(t);          ###< 返回交集
a = s & t;                      ###< 返回交集
s.difference(t);                ###< 返回s 中有但是 t 中没有的
s.symmetric_difference(t)       ###< 返回 s 和 t 中不重复的元素
s ^ t                           ###< 返回 s 和 t 中不重复的元素