- 内建的 containers: dict, list, set, and tuple
- 'collections' 模块中的 container: Counter, deque, OrderedDict and defaultdict, and one datatype factory function, namedtuple().
一些内建的 containers
- " " str
- [ , ] list
- ( , ) tuple
- { , } set
- { : , } dict
container 一般支持如下操作(以 set 为例)
x in set, len(set), and for x in set
container 又有特殊的子类 sequence
Python 3.0 sequence type 共有六种
- str
- bytes
- bytearray
- list
- tuple
- range
- Immutable sequences (cannot change once it is created):str, bytes, tuple
- Mutable sequences: bytearray, list
Sequences 可以使用的操作
Operation | Result |
---|---|
x in s | True if an item of s is equal to x, else False |
x not in s | False if an item of s is equal to x, else True |
s + t | the concatenation of s and t |
s * n, n * s | n shallow copies of s concatenated |
s[i] | i‘th item of s, origin 0 |
s[i:j] | slice of s from i to j |
s[i:j:k] | slice of s from i to j with step k |
len(s) | length of s |
min(s) | smallest item of s |
max(s) | largest item of s |
另外两个操作: for i in seq: expression it = iter(seq) it.next()
语法为 comma separated list = sequence,注意左值个数必须等于序列的长度。这种操作也支持 iterator
x,y=[1, 2]
x,y="xy"
x,y=(1,2)
it = iter("ab")
a,b = it
x,y="xy"
x,y=(1,2)
it = iter("ab")
a,b = it
'\n'.join(seq) 将 string 元素组成的 sequence 展开成一个string (seq 中不能包含非string元素)
>>> s="I love you!" >>> s.split() ['I', 'love', 'you!'] >>> print('\n'.join(s.split())) I love you!FOR 的魅力
for item in sequence_of_item [if expr(item)]: expression 例如: for i in range(N): #0-N-1 for i in range(len(seq)): expression(seq[i])注: item 的形式必须和在 sequence 中形式一致,如果 item 也是一个 sequence,则可以使用 sequence unpacking 规则。
>>> li=[(1,2),(3,4)] >>> for i in li: print i (1, 2) (3, 4) >>> for i,j in li: print i 1 3
>>> week = {"monday":1,"tuesday":2} >>> week.items() [('tuesday', 2), ('monday', 1)] >>> for day in week.items(): print day ('tuesday', 2) ('monday', 1) >>> for day, number in week.items(): print day tuesday monday >>>
除了 for in,还有 if...in... 判断 item 是否在 sequence 里面
>>> if 'i' in 'illl': print 'OK' OK >>>
sequence 相互转化
string 可以通过 list(), tuple() 转化为 list, tuple。list 和 tuple 之间也可以通过这两个函数相互转化。
indexing
Dictionary 和 sequence 的 indexing 都用 [],但是 dictionary 的下标是 key,而 sequence 的下标是数字,从0开始,假设有n个元素,则 n 表示结尾位置,而 -1 表示最后一个元素位置,slicing 时左闭右开,[0:n] 为所有元素,[0,-1]则缺少最后一个元素。
接下来说说每类 container 该注意的地方。
dict
dict (dictionary): 相当于 STL 的 map {key:value}
dictionary 可以用于格式化字符串,用类似 %(key)s 来替换
line = """hi %(name)s, you donated $%(amount)d. Thanks. """ dict = {'name':'kevin','amount':50}; print line%dict
dict 的几个函数
>>> d = {'ab':'word','cd':'air',12:34} >>> 'ab' in d True >>> 12 in d True >>> d[12] 34 >>> d['cd'] 'air' >>> d.get(12) 34 >>> d.keys() ['ab', 12, 'cd'] >>> d.values() ['word', 34, 'air'] >>> d.items() [('ab', 'word'), (12, 34), ('cd', 'air')]dict 遍历
for key in dict # 相当于 for key in dict.keys()
所以
for key in dict:
use key and dict[key]
或者
for key,value in dict.items():
use key and value
list
list append 和 extend 的区别
- append adds a single element to the end of the list.
- extend concatenates lists. Its argument is a list.
str 是 unicode 序列, 但是在写文件时,默认是 ASCII 和 unicode 混合。比如 file.write("abc我们"),则 abc 为 ASCII, 我们 为 unicode。
bytes, bytearray 是字节(0-255)序列,在 referencing 时是 0-255 数字,在 slicing 时是bytes(/bytearray?)序列,二者是不相等的。
str 和 bytes 可以显式转化,但不等同,所以需要 str 的地方不能用 bytes,反之亦然。
>>> s=b"abc" >>> s[0] 97 >>> s[:1] b'a' >>> 97==b'a' False二进制方式打开文件时不能输入 str.
u"This is unicode string" 以 u 开头的字符串是 unicode 字符串。它不能用 print 打印,要使用成员函数 encode.
Python 3.0 取消了这种方式,因为 str 就是 unicode 序列。
0 comments:
Post a Comment