序列-列表
1. 字符串
-
字符串
-
字符串使用一对单引号或者双引号包含起来的一串字符
'Hello python' "Let's go"
-
-
其他类型转换字符串
# 1. 对象的python表达式 repr(1000L) x = 100L `x` # 2. 其他对象转换为字符串 str(3)
-
字符串转义
改变原本含义
种类
\n, \t, \r,
-
字符串运算
# 1. 字符串拼接 'hello' 'python' 'hello' + 'python' #加号两边必须都是字符串常量或变量,否则会抛出TypeError # 2. 乘法, 把字符串重复多少变 '*' * 10
-
长字符串,原始字符串,Unicode字符串
-
长字符串:使用三个引号,跨多行字符串
print '''This is a very long string. It continues here. And it's not over yet.'''
-
原始字符串:字符串前面加个r,对反斜线(\)不做转义处理
str = r'C:\nowhere'
-
Unicode字符串:字符串前面加个u
python 2普通字符串以ASCII存储,python 3中所有字符串都是Unicode字符串
unicode_str = u"I'm an unicode string"
-
2. 序列
2.1 序列通用操作
python内建的六种序列:元组,列表,字符串,Unicode字符串,buffer对象,xrange对象
-
索引:索引可以是正数,也可以是负数,但是索引必须在序列的范围内,否则引发IndexError exception
l = [1, 2, 3, 4, 5, 6] # 1. 索引从0开始 l[0] #l[0] = 1 # 2. 索引可以使用正数也可以使用负数,正数从左开始,负数从右开始 l[2] #l[2] = 3 l[-4] #l[-4] = 3 # 3. 负数索引时从1开始,最后一个元素为-1 l[-1] #l[-1] = 6
-
分片:分片的开始和结束可以超过序列索引范围,开始和结束取不到元素返回空序列,步进可以是正数也可以是负数,正数从前往后取元素,负数从后往前取元素,start,end控制范围,step控制顺序
-
访问一定范围的内的元素,语法[start : end : step]
左闭右开,包含开始,不包含结束
l = [1, 2, 3, 4, 5, 6] l[2:5] #[3, 4, 5]
-
step表示步长,start,end,step可以是正数或者负数,负数表示从后往前
l[-1:-3] #[], step为正时,start一定要在end的左边 l[-3:-1] #[4, 5] l[-1:-3:-1] #[6, 5] l[3:6] #[4, 5, 6], 我为了获取最后一个元素,end比较最后一个至少元素大1 l[3:] #[4, 5, 6], end不写取剩下的所有 l[:3] #[1,2,3], strat不写从0开始 l[:] #[1, 2, 3, 4, 5, 6], 返回一个副本 l[::-1] #倒序
start, end可以超出序列的索引范围,不会出现异常,只是范围内没有元素返回空序列
分片返回的都是一个新的序列
对分片进行赋值会改变原来的序列的,但是只对可变序列才能做赋值操作,
否则出现TypeError: ’xx‘ object does not support item assignment
-
-
加:序列进行连接操作
[1, 2, 3, 4] + [5, 6, 7] #[1, 2, 3, 4, 5, 6, 7] [1, 2, 3] + 'python' # TypeError
相同类型的序列才可以进行连接操作
-
乘: 数字n乘以一个序列生成一个新的序列, 新的序列中原序列重复n次
'python' * 5 #'pythonpythonpythonpythonpython' [42] * 10 [42, 42, 42, 42, 42, 42, 42, 42, 42, 42]
None, 空序列, 初始化
空列表[], 长度为0
None是python中的特殊值, 表示什么都没有
[None] * 10, 表示长度为10的空列表
-
成员资格
- in:检查某个对象是否为序列的成员,返回一个布尔值
permissions = 'rw' 'w' in permissions #True 'x' in permissions #False 'P' in 'Python' #True 'Py' in 'Python' #True, python 2.3之前in操作只能检测单个字符是否存在字符串中,2.3之后支持子字符串 l = ['albert', 'dilbert', 'smith'] 'albert' in l #True, 类似有列表的index方法
2.2 通用函数
- 长度:len()
- 最大值:max()
- 最小值:min()
2.3 列表
列表不同于字符串和元组,列表是一种可以改变的序列
列表的元素可以是任意类型
-
其他对象转换为列表:list(), list实际是一种类型
-
改变元素,赋值
x = [1, 2, 3] x[0] = 3 #[3, 2, 1]
-
删除元素
x = [1, 2, 3] del x[1] #[1, 3] del x #删除x变量
-
分片赋值
分片赋值可以使用与原序列不等长的序列替换分片
分片可以修改元素,插入元素,删除元素
name = list('Perl') number = [1, 5] name[2:] = list('ar') #['p', 'e', 'a', 'r'] number[1:1] = [2, 3, 4] #[1, 2, 3, 4, 5] number[1:4] = [] #[1, 5]
-
列表方法
-
append:列表末尾追加新元素
lst = [] lst.append(4) #[4] lst.append([1, 2]) #[4, [1, 2]]
-
count:统计某个元素在列表出现的次数
x = [1, 2, 3, 4, 3, 2, 2] x.count(2) # 3
-
extend:在列表末尾一次性追加另一个序列中的多个值
a = [1 ,2 ,3] b = [4, 5 ,6] a.extend(b) #[1, 2, 3, 4 ,5, 6]
extend和连接操作, 连接返回一个新的列表返回,extend是在原地操作
a = a + b的情况下,extend比连接效率高
-
index:返回某个值的索引位置
knights = ['we', 'are', 'the', 'knights', 'who', 'say', 'ni'] knights.index('who') #4 knights.index('herring') #未找到抛出ValueError:'xx' is not in list
-
insert:列表指定位置插入一个元素
number = [1, 2, 3, 4] number.insert(3, 'four') #[1, 2, 3, 'four', 4] number.insert(5, 'last') #[1, 2, 3, 'four', 4, 'last'] number.insert(10, 'last') #[1, 2, 3, 'four', 4, 'last', 'last']
插入位置可以为正数,也可以负数,可以超出索引范围,超过之后正数插入末尾,负数插入到开头
-
pop:移除列表中的一个元素,并返回元素的值,默认最后一个
x = [1, 2, 3] x.pop() #3, x = [1, 2] x.pop(0) #1, x = [2] x.pop(-1) #2, x = [] x.pop(10) #IndexError: pop index out of range
pop方法是唯一一个既改变列表又返回元素值的方法
pop的参数可以是正数也可以是负数,但是必须是在列表的索引范围内,否则引发
IndexError: pop index out of range
-
remove:移除列表中第一个匹配项
未找到匹配的值,引发ValueError异常,
x = ['to', 'be', 'or', 'not', 'to', 'be']
-
x.remove(‘be’) #[‘to’, ‘or’, ‘not’, ‘to’, ‘be’]
```
-
reverse:原地反转列表,返回空
如果要反向迭代列表,使用reversed()函数,返回一个迭代器
-
sort:原地排序
如果需要返回新的排序后副本,先返回一个副本再排序
或者使用sorted函数,sorted函数可以用于任何可迭代对象,返回一个列表
2.4 元组
-
tuple():可以使用序列通用操作
-
使用小括号,只有一个元素需要加逗号(1,),空元组()
-
元组只有count和index两个方法
元组主要使用场景
可以作为字典的键使用
作为函数的返回值