python有6中内建序列,分别为:列表、元组、字符串、Unicode字符串、buffer对象、xrange对象。序列属于容器的一种,另一种主要的容器是字典。
一、下面介绍通用序列操作:
1.索引序列中所有元素从左向右编号为:0、1、2...... 从右向左为-1、-2、......、0 索引时用方括号:[ ]在输入时也可用索引,这时输入返回的结果就是索引号指示的值(输入字符串长度要大于索引号)
2.分片
形式:[L:R:S]
L和R代表索引号,S代表步长,默认为1,可为正为负,若为正,应有L<R;若为负,应有L>R
3.序列相加实为拼接,要是同类型的序列(都是字符串或者都是元组等等)
4.乘法序列乘以一个数字,与拼接类似
5.in运算符返回布尔值,判断一个对象是否为序列中的一个元素
6.len、max、min属于内建函数,分别返回序列中元素数量、元素最大值、最小值
二、列表特点:可改变列表的内容
1.list函数(类型) 利用list创建列表
<span style="font-family: Arial, Helvetica, sans-serif;">>>>> list('hello world')</span>
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
>>> list(['hello'])
['hello']
>>>
2.赋值
利用索引
3.删除
del 可删除指定的某一范围内的值
4.分片赋值
可以使用与原序列不等长的序列将分片替换,而一次一个赋值不可改变原序列长度,即不能为一个位置不存在的元素进行赋值
分片赋值可以执行替换、插入、删除操作
5.列表方法
方法是一个与某些对象(列表、字符串、数字等等)有紧密联系的函数
调用方法:对象.方法(参数)
append:列表末尾追加新的对象,可以用分片赋值代替
>>> num=[1,2,3]
>>> num.append(4)
>>> num
[1, 2, 3, 4]
>>> num[4:4]=[5]
>>> num
[1, 2, 3, 4, 5]
>>>
count:统计元素出现的次数
extend:扩展序列,类似于序列相加,但是不同点是extend会修改被扩展的序列
index:索引,从列表中找出某个值第一个匹配项的的索引位置,如果找不到,会引发一个异常
insert:插入,可以用分片赋值代替
pop:移出列表中的元素(默认是最后一个),和append类似于出栈、入栈操作;也可以模拟队列操作,但是要用pop(0);会返回移除的值
remove:移除列表中某个值的第一个匹配项,无返回值
reverse:反向存放列表中的元素
sort:直接对原序列进行排序,无返回值;与sorted函数的不同:sorted返回对序列排序后的结果,而原序列并未改变
>>> num
[1, 2, 3, 100, 5]
>>> y=sorted(num)
>>> y
[1, 2, 3, 5, 100]
>>> num
[1, 2, 3, 100, 5]
>>> y=num.sort()
>>> y
>>> num
[1, 2, 3, 5, 100]
>>>
sort还可以包含参数:
>>> num
[1, 1000, 3, 5, 100]
>>> num.sort(reverse=True)
>>> num
[1000, 100, 5, 3, 1]
>>>
表示进行反向排序
>>> string=['hello','hel','lo']
>>> string.sort(key=len)
>>> string
['lo', 'hel', 'hello']
>>>
表示按照元素的长度进行排序
三、元组
特点:内容不可修改
1.创建方法
用逗号分割一些值,就自动创建了元组;如果就一个值,也要加逗号
2.tuple函数(类型)
会把一个序列作为参数转换为元组,如果参数本身为元组,那么原样返回
3.索引、分片参考列表
四、字符串
特点:内容不可变
1.格式化
字符宽度:转换后的值最小字符个数
精度:结果中应包含的小数位数(对于数字转换来说);转换后的值所能包含的最大字符个数(对于字符串转换来说)。两者通过“.”分割。可以使用“*”作为宽度和精度,此时数值会从元组参数中读出
“-”表示左对齐;“+”表示结果中标识出符号;“ ”表示正数前加空格
2.字符串方法
find:查找字符串;尅提供查找范围,左闭右开
join/split:前者合并,后者分割
>>> dirs='','usr','bin','env'
>>> print('c:'+'\\'.join(dirs))
c:\usr\bin\env
>>> '1+2=43+3+4'.split('+')
['1', '2=43', '3', '4']
replace:用一个字符串代替某一个字符串的所有匹配项
>>> 'hello world'.replace('lo','fdjks')
'helfdjks world'
strip:去掉字符串两端的空格
translate、maketrans:用maketrans设置转换表,用translate进行转换
>>> temp='hello world'
>>> table=temp.maketrans('hel','qwy')
>>> temp.translate(table)
'qwyyo woryd'
>>>
和replace方法一样,但有时比replace效率更高
五、字典
类似于C++中的map
1.dict函数(类型)
通过键值对创建:
>>> items=[('name','John'),('age',13)]
>>> d=dict(items)
>>> d
{'name': 'John', 'age': 13}
>>>
通过关键字创建(关键字不用加引号)
>>> temp=dict(name='John',age=18)
>>> temp
{'name': 'John', 'age': 18}
>>>
2.字典具有自动添加功能,如果键刚开始不存在,也可以为它分配一个值
>>> temp={'x':13}
>>> temp['y']=90
>>> temp
{'x': 13, 'y': 90}
>>>
3.查找键是否存在字典中,用in
4.格式化,%后加上键
>>> data={'Anna':{'addr':'XXX','phone':'012345'}}
>>> "Anna's addr is %(addr)s." % data['Anna']
"Anna's addr is XXX."
>>>
5.清空字典,用clear
下面这种方法清空字典无效:
>>> x={'a':1,'b':2}
>>> y=x
>>> x={}
>>> x
{}
>>> y
{'a': 1, 'b': 2}
>>>
原因是语句x={},仅是让x指向了另一个值,而以前所指向的内容(即y现在所指向的)并未改变;是不是有些像指针呢?
用clear就可以,清空的是指向的内容,而x、y指向的是同一个内容
>>> x={'a':1,'b':2}
>>> y=x
>>> x.clear()
>>> y
{}
>>>
对于列表也是如此
6.copy(方法),deepcopy(函数)
>>> from copy import deepcopy
>>> d={'names':['Alfred','Bertrand']}
>>> c=d.copy()
>>> dc=deepcopy(d)
>>> d['names'].append('John')
>>> c
{'names': ['Alfred', 'Bertrand', 'John']}
>>> dc
{'names': ['Alfred', 'Bertrand']}
>>>
copy是浅复制,deepcopy是深复制
对于copy,如果副本被修改(不是值的替换,修改是例如添加、删除的操作),那么原始数据也替换,而deepcopy不会;反过来,修改原始数据对副本的影响也是如此
7get方法,两个参数,第二个默认为None,与普通查询一样
但是若通过普通查询访问一个不存在的项,那么会出错,而对于get不会,然而get不会自动添加不存在的键(因为get是获取),并分配值:
>>> temp={'x':12,'y':13}
>>> print(temp['z'])
Traceback (most recent call last):
File "<pyshell#44>", line 1, in <module>
print(temp['z'])
KeyError: 'z'
>>> print(temp.get('z',100))
100
>>> temp
{'x': 12, 'y': 13}
>>>
8.items方法将所有的字典项以列表方式返回,列表项中的每一项都来自于(键,值)
9.pop和popitem
pop移除指定的项,参数是键;popitem随机“弹出”一项
10.setdefault
与get类似,但是当键不存在时,可以设定相应的键值,默认为None
11.update
a.update(b),用b更新a,即将b中的项添加到a中,相同的键会被b中的覆盖
12.values
以列表形式返回值