一个没有逻辑顺序的python笔记,包括日常使用python时的总结与阅读《Python基础教程》([挪] Magnus Lie Hetland 著) 的读书笔记:
2011/11/20 Mon 15:29
Python中有6中内建序列(sequence):list,tuple,字符串,Unicode字符串,buffer,xrange。
序列和映射是两种主要的容器(container)。
序列包括 list 和 tuple , 映射包括 dict
set 即不是序列又不是映射
序列操作:indexing,slicing,adding,multiplying
slicing:第一个参数包含,第二个不包含,可以用第三个参数指定步长,步长可以是负数。
In [4]: a
Out[4]: [0, 1, 2, 3, 4, 5, 6, 7, 8]
In [5]: a[8:3:-2]
Out[5]: [8, 6, 4]
adding:同类序列可以相加,进行连接
multiplying:新的序列重复原有序列,乘数为重复次数
In [6]: a = [1,2] * 8
a
Out[7]: [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
None 用来代表空值,类似matlab的NaN,如需要无值的初始化,可以:
a = [None] * 6
a
Out[9]: [None, None, None, None, None, None]
成员资格:in 来检查是否是成员,对于字符串可以如下:(Python2.3起)
In [10]: sub = 'too young too simple'
In [11]: 'you' in sub
Out[11]: True
In [12]: 'naive' in sub
Out[12]: False
分片赋值:可以替换成与原序列不等长的内容:
name = list('Pear')
name
Out[26]: ['P', 'e', 'a', 'r']
name[1:] = list('ahahaha')
name
Out[28]: ['P', 'a', 'h', 'a', 'h', 'a', 'h', 'a']
同时分片赋值还能实现 insert 的 method 功能,非常高级666:
numbers = range(5)
numbers
Out[14]: [0, 1, 2, 3, 4]
numbers[1:1]
Out[15]: []
numbers[1:1] = [666,666]
numbers
Out[17]: [0, 666, 666, 1, 2, 3, 4]
list 的各种 method :append,count(查元素个数),index(第一个匹配项的索引位置),insert,pop(默认LIFO,可指定pop(someindex) )。
reverse 方法可以反向存放。(注意列表的 method 一般都为原位操作,改变原列表),sort 排序。reversed 和 sorted 函数可以不改变原 list 。
a
Out[30]: [3, 5, 1, 8, 6, 9]
sorted(a)
Out[31]: [1, 3, 5, 6, 8, 9]
a
Out[32]: [3, 5, 1, 8, 6, 9]
a.sort()
a
Out[34]: [1, 3, 5, 6, 8, 9]
sort 排序可以传参数,key可以传len,表示按照长度排序。反向排序reverse=True:
a.sort(reverse=True)
a
Out[40]: [9, 8, 6, 5, 3, 1]
tuple 是不可变的 sequence,不能修改。用逗号分割一些值实际上就是创造了tuple,而单个值加逗号也可以创建tuple:
1,
Out[41]: (1,)
1,2,3
Out[42]: (1, 2, 3)
tuple 能在映射(dict)和集合的成员中作 key ,而 list 不行。
tuple 作为很多内建函数的返回值。
THE END