List
1.创建
L = [1,True,'ad',''] //相当于数组,可以存储不同类型的元素
2.访问(可以倒序访问,倒数第一为L[-1],以此类推)
L[1] //1 L[-1] //''
3.修改
(1)增
L.append('Yue') //[1,True,'ad','','Yue'],将元素'Yue'添加到最后 L.insert(0,3) //[3,1,True,'ad',''],将元素3查到下标0之前
(2)删
L.pop() //返回'',删除并返回最后一个元素 L.pop(index) //删除下标为index的元素并返回
(3)改
L[1] = 666 //[1,666,'ad',''],直接覆盖对应下标的值
4.特点
(1)占用内存小,但是查找速度慢
(2)查找速度随着元素增加而逐渐下降
tuple
1.创建
t = ('Adam', 'Lisa', 'Bart')
tips:
当tuple内只有1个元素如t = (1)时会被python解释器当成括号1而计算结果为1,为了避免这种歧义只有一个元素时写成t = (1,)
2.访问
t[0] //返回'Adam'
3.修改
t[0] = 'Paul' //tuple一旦创建就不能改变,赋值为别的元素会报错TypeError: 'tuple' object does not support item assignment
4."可变"的tuple
尽管tuple自身不能改变但我们可以在tuple里嵌List来变成"可变"的tuple
如:
t = ('a','b',['A','B']), L = t[2] L[0] = 'X' L[1] = 'Y'
>>>tuple变为('a','b',['X','Y'])
tuple所谓"不变"是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
dict(key => value,存储的数据没有顺序)
1.创建
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
tips: len()可以计算dict,List,tuple的大小
2.访问
d['Adam'] //返回95
tips:访问的key可能不存在会报错KeyError,因此可以通过2中方法解决
(1)if-in判断
if 'Paul' in d: print d['Paul']
(2)get方法
d.get('Bart') //59 d.get('Paul') //None
3.更新
d['Adam'] = 70
4.遍历
for key in d: print key ,': ',d[key]
4.特点
(1)查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样
(2)占用内存大,还会浪费很多内容
(3)作为 key 的元素必须不可变
set(元素没有重复,而且是无序的,且只存储key不存储value)
1.创建:调用 set() 并传入一个 list
s = set(['A', 'B', 'C', 'C']) //输出['A', 'B', 'C'],因为set会自动去掉重复的元素
2.访问
set存储的是无序集合,所以我们没法通过索引来访问,所以使用in操作符判断元素是否在set中
'Bart' in s
3.遍历
for name in s: print name
4.更新
(1)添加
s = set([1, 2, 3]) s.add(4)
tips:加入重复的元素不会报错但也不会加进去,如s.add(3)的话s不变;
(2)删除
s.remove(4)
tips:删除不存在的元素会报错
条件语句:
1.if语句
age = 30 if age >= 20: print 1 print 2
tips:if语句中缩进相同的语句才在同一个代码块中,因此上述例子print 1和print 2都只在age >= 20时才输出
2.if-else语句
if score >= 60: print 'passed' else: print 'failed'
3.if-elif-else语句
if score >= 90: print 'excellent' elif score >= 80: print 'good' elif score >= 60: print 'passed' else: print 'failed'
循环语句
1.for循环
L = [75, 92, 59, 68] for key in L: print key
2.while循环
x = 1 while x < 100: x = x + 1
切片(slice)
L = ['Adam', 'Lisa', 'Bart', 'Paul']
(1)用法
L[index:num] //表示从下标index开始取num个元素,index为0时可简写为L[:num]
例如前三个: L[0:3]或L[:3]
而L[:]则表示从头取到尾,实际上复制了一份List
(2)指定第三个参数
L[::2]表示每2个元素取一个数即隔一个取一个,得到['Adam','Bart']
(3)也可对tuple切片,只是切片结果为tuple
(4)倒序切片
L[-2:] //['Bart','Paul']
迭代
task:
打印
0 - Adam
1 - Lisa
2 - Bart
3 - Paul
L = ['Adam', 'Lisa', 'Bart', 'Paul'] for index,name in enumerate(L): print index, ' - ',name
enumerate函数的作用:把['Adam', 'Lisa', 'Bart', 'Paul']变成了类似[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]的tuple
zip()可以把2个list变成一个list
zip([10, 20, 30], ['A', 'B', 'C']) //[(10, 'A'), (20, 'B'), (30, 'C')]
用for-in循环只能取出dict的key值,要使用values()或itervalues()方法才能取到value值。两者的区别是values()方法实际上将dict转换为了包含value的list而itervalues()不会,它从迭代过程中依次取出value,因此比values()方法节省内存
items(): 将dict对象转换为包含tuple的list
如: d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
则 d.items()返回[('Lisa', 85), ('Adam', 95), ('Bart', 59)]
iteritems(): 与values()和itervalues()类似,它也是不把dict转换成list,而是在迭代过程中不断给出tuple