python数据类型
整数、浮点数(1.23x10^9就是1.23e9)、字符串、布尔值(True、False)、空值(None)
注释
用#表示
raw字符串
在字符串前面加个前缀 r ,表示这是一个 raw 字符串,里面的字符就不需要转义了
r'''python's
best
language'''
字符串连接用+连接或者用().join() 或者逗号,来连接
list类型
L.append('item') append()总是把新的元素添加到 list 的尾部
L.insert(2,'item') insert()方法,它接受两个参数,第一个参数是索引号,第二个参数是待添加的新元素
L.pop() pop()方法总是删掉list的最后一个元素,并且它还返回这个元素
L.pop(4) pop()按索引删除
替换元素的话直接赋值即可
tuple类型
创建tuple和创建list唯一不同之处是用( )替代了[ ]
t = ('Adam', 'Lisa', 'Bart')
t[-1] 利用索引访问数据,但是不能赋值
单元素 tuple 要多加一个逗号“,”,这样就避免和括号歧义如:t = (1,)
dict类型
花括号 {} 表示这是一个dict,内容按照 key: value形式
d[key] 的形式来查找对应的 value
判断key是否存在d.get(key)来判断,没有则返回None
d.values()获取所有value的list
d.itervalues()方法和values()方法迭代效果完全一样
那这两个方法有何不同之处呢?
- values() 方法实际上把一个 dict 转换成了包含 value 的list。
- 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
- 打印 itervalues() 发现它返回一个 <dictionary-valueiterator> 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。
d.items()方法把dict对象转换成了包含tuple的list
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
>>> print d.items()
[('Lisa', 85), ('Adam', 95), ('Bart', 59)]
>>> for key, value in d.items():
... print key, ':', value
...
Lisa : 85
Adam : 95
Bart : 59
和 values() 有一个 itervalues() 类似, items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存
set类型
dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。
set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。
创建 set 的方式是调用 set() 并传入一个 list,list的元素将作为set的元素
s = set(['A', 'B', 'C'])
'item' in s 返回true或者false
s.add('D') 一是把新的元素添加到set中
s.remove('D') 二是把已有元素从set中删除
切片
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。
>>> L[:3]
['Adam', 'Lisa', 'Bart']
也可以从索引1开始,取出2个元素出来:
>>> L[1:3]
['Lisa', 'Bart']
只用一个 : ,表示从头到尾:
>>> L[:]
['Adam', 'Lisa', 'Bart', 'Paul']
L[:]实际上复制出了一个新list。
>>> L[::2]
['Adam', 'Bart']
第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个。
倒序切片
倒数第一个元素为L[-1],倒序切片包含起始索引,不包含结束索引
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> L[-2:]
['Bart', 'Paul']
>>> L[:-2]
['Adam', 'Lisa']
>>> L[-3:-1]
['Lisa', 'Bart']
>>> L[-4:-1:2]
['Adam', 'Bart']
迭代
python中,迭代永远是取出元素本身,而非元素的索引
对于有序集合,元素确实有索引,有时候想拿到索引
enumerate()函数
['Adam', 'Lisa', 'Bart', 'Paul']
变成了类似:
[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]
enumerate() 函数自动把每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身。
zip()函数可以把两个 list 变成一个 list:
>>> zip([10, 20, 30], ['A', 'B', 'C'])
[(10, 'A'), (20, 'B'), (30, 'C')]
isinstance(x, str) 可以判断变量 x 是否是字符串
匿名函数lambda x: x * x实际上就是:
def f(x):
return x * x
关键字lambda表示匿名函数,冒号前面的x表示函数参数。