序列:
1.列表
2.元组
3.字符串
4.字典
通用序列操作:
1.索引(访问单个元素):
从0开始递增,若使用负数,最右边元素(即最后一个)为-1。(原因:不能和第一个元素重复)
2.分片(访问一定范围内元素):通过冒号隔开的两个索引实现。[ )
例:
>>>numbers=[1,2,3,4,5,6,7,8,9,10]
>>>numbers[3:6]
>[4,5,6]
>>>numbers[-3:-1]
>[8,9]
>>>numbers[-3:0]
>[] (原因:只要冒号左边索引比右边的晚出现在序列中,则输出空序列)
>>>numbers[-3:]
>[8,9,10]
>>>numbers[:3]
>[1,2,3]
>>>numbers[:]
>[1,2,3,4,5,6,7,8,9,10]
步长:默认为1,可为负数(代表从右开始)
>>>numbers[0:10:2]
>[1,3,5,7,9]
>>>numbers[::4]
>[1,5,9]
>>>numbers[0:10:-2]
>[] (原因:只要冒号左边索引比右边的晚出现在序列中,则输出空序列。即是用负数步长时,冒号左侧索引必须大于右侧索引)
>>>numbers[8:3:-1]
>[9,8,7,6,5]
3.相加
>>>[1,2,3]+[4,5,6]
>[1,2,3,4,5,6]
>>>'hello,'+'world'
>'hello,world'
>>>[1,2,3]+'hello'
>报错,列表和字符串无法相加。(两种不同类型的序列不能进行连接操作)
4.相乘
重复序列操作
>>>[2]*4
>[2,2,2,2]
5.成员资格
in操作符,若存在返回True,否则返回False。
6.长度,最大值和最小值
内建函数:len min max
列表(list)–可变 []
1.list函数
>>>list(“hello”)
>['h','e','l','l','o']
2.赋值
>>>x[1,2,3]
>>>x[1]=1
>>>x
>[1,1,3]
3.删除元素
del list1[1]
4.分片赋值
不等长分片替换:
>>>name=list('Perl')
>>>name[1:]=list('ython')
>>>name
>['P','y','t','h','o','n']
插入序列:
>>>numbers=[1,5]
>>>numbers[1:1]=[2,3,4]
>>>numbers
>[1,2,3,4,5]
删除序列:(效果等同于del numbers[1:4])
>>>numbers[1:4]=[]
>>>numbers
>[1,5]
5.列表方法
1.append
在列表末尾追加新对象,直接修改原列表。
2.count
统计某个元素在列表中出现的次数
3.extend
在列表末尾一次性追加另一个序列中的多个值。
list1.extend(list2) 此操作修改了list1
>>>list1=[1,2,3]
>>>list2=[4,5,6]
>>>list1.extend(list2)
>>>list1
>[1,2,3,4,5,6]
但是原始的连接操作,是创建了一个包含list1和list2副本的新列表,没有改变list1。所以原始的连接操作的效率要比extend方法低。
>>>list1=[1,2,3]
>>>list2=[4,5,6]
>>>list1+list2
>[1,2,3,4,5,6]
>>>list1
>[1,2,3]
4.index
用于从列表中找出某个值第一个匹配项的索引位置,若不存在则返回异常。
5.insert
>>>numbers=[1,2,3,4,5,6]
>>>numbers.insert(3,'four')
>>>numbers
>[1,2,3,'four',4,5,6]
6.pop
移除列表中的一个元素(默认最后一个),并返回该元素的值。
注:pop是唯一一个既能修改列表又能返回元素值的列表方法。
7.remove
移除列表中某个值的第一个匹配项。若不存在,会报错。
8.reverse
将列表中的元素反向存放。
9.sort
在原位置对列表进行排序。
>>>x=[4,6,2,1,7,9]
>>>x.sort()
>>>x
>[1,2,4,6,7,9]
当用户需要一个排好序的列表副本,又想保持原有列表不变的时候:
>>>x=[4,6,2,1,7,9]
>>>y=x[:]
>>>y
>[1,2,4,6,7,9]
>>>x
>[4,6,2,1,7,9]
注:这里用了分片的方法复制了整个列表。x=y实现的是让x和y指向同一个列表。
改变了列表,却没有返回值。(remove,reverse,sort)
10.高级排序
1.cmp(x,y) x<y时返回负数,x>y时返回正数,x=y时返回0。
sort函数有另外两个可选的参数—key和reverse
x.sort(key=len)//根据元素的长度进行排序
x.sort(reverse=True) //列表是否要进行反向排序
元组–不可变()
1.创建元组
>>>1,2,3 //使用逗号分隔了一些值 或(1,2,3)
>(1,2,3)
>>>() //空元组可以使用没有包含内容的两个圆括号来表示
>()
>>>(1,) //包括一个值的元组,必须加个逗号
>(1,)
2.tuple函数
以一个序列作为参数,把它转换为元组。
>>>tuple([1,2,3])
>(1,2,3)
>>>tuple(’abc')
>('a','b','c')
除了创建元组和访问元组元素外,没有太多其他操作。
字符串-不可变
1.字符串格式化(%)
>>>format="Hello,%s.%s enough for ya?"
>>>values=('world','Hot')
>>>print format % values
>Hello,world. Hot enough for ya?
只有元组和字典可以格式化一个以上的值。
%s为转换说明符。
%s 字符串 str
%f 浮点数 %.3f 3是精度
需要抓换的元组必须用圆括号括起来。
>>>'%s plus %s equals %s' % (1,1,2)
>'1 plus 1 equals 2'
字段宽度和精度
>>>'%10.2f' % Pi
>' 3.14' //10是字段宽度,2是精度
2.字符串方法
1.find
查找子串,返回子串所在位置的最左端索引,若没找到,返回-1。
>>>title.find('str')
还可接受可选的起始点和结束点参数
>>>title.find('str',1) #只提供起始点
>>>title.find('str',1,20) #提供了起始点和结束点
rfind index rindex count startwith endswith
2.join
split方法的逆方法,连接序列中的元素(必须都是字符串)。
>>>seq=['1','2','3','4','5']
>>>sep = '+'
>>>sep.join(seq)#连接字符串列表
>'1+2+3+4+5'
>>>dirs='','usr','bin','env'
>>>'/'.join(dirs)
>'/usr/bin/env'
3.lower
返回字符串的小写字母。
islower capitalize swapcase title istitle upper isupper
注:title方法会将字符串转换为标题,所有单词首字母大写。
4.replace
返回某字符串的所有匹配项均被替换之后得到的字符串。
>>>'This is a test'.replace('is','eez)
>'Theez eez a test'
5.split
将字符串分割成序列。
>>>'1+2+3+4+5'.split('+')
>['1','2','3','4','5']
>>>'/usr/bin/env'.split('/')
>['','usr','bin','env']
6.strip
返回去除两侧(不包括内部)空格的字符串。
也可指定需要去除的字符:
str.strip(‘str1’)
>>>'*** SPAM is ** dsaf ** everyone!!!***'.strip('*!')
>'SPAM is ** dsaf ** everyone'
7.translate
和replace类似,可以替换字符串中的某些部分,但是translate只能处理单个字符,优势在于可以同时进行多个替换,效率高。
使用translate转换之前,需要完成一张转换表。(使用string模块中的maketrans函数)
>>>from string import maketrans
>>>table = maketrans('cs','kz') #c替换为k,s替换为z
>>>'this is an incredible test'.translate(table)
>'thiz iz an inkredible tezt'
translate第二个参数是可选的,用来指定需要删除的字符。
>>>'this is an incredible test'.translate(table,‘ ’)
>'thizizaninkredibletezt'
字典-{键:值,键:值}
1.创建字典
dict函数,可以通过其他字典或者(键,值)对的序列建立字典。
>>>item=[('name','gummy'),('age',42)]
>>>d=dict(item)
>>>d
>{'age':42,'name':'gummy'}
>>>d['name']
>'gummy'
dict函数也可以通过关键字参数来创建字典:
>>>d = dict(name='gummy',age=42)
>>>d
>{'age':42,'name':'gummy'}
2.基本字典操作
- len(d) 返回键值对数量
- d[k] 键k对应的值
- d[k]=v 更新键k的值为v
- del d[k] 删除键为k的项
- k in d 检查d中是否有含有键为k的项
**键类型:**可以是任意的不可变类型(整型,浮点型,字符串或元组)。
**自动添加:**即使键起初在字典中并不存在,也可以为它赋值,即创建新的项。
>>>x=[]
>>>x[42]='floor'
>报错
>>>x={}
>>>x[42]='floor'
>>>x
>{42,'floor'}
3.字典的格式化字符串
%(键)说明元素
>>>phonebook={'a':'9102','b':'2341','c':'3258'}
>>>"c's phone number is %(c)s."%phonebook
>c's phone number is 3258
4.字典方法
(1)clear
清除字典中所有的项。原地操作,无返回值(或者说返回None)
>>>x={}
>>>y=x
>>>x['key']='value'
>>>y
>{'key':'value'}
>>>x={} #x关联到一个新的空字典,对y没有影响,y仍然关联到原先的字典
>>>y
>{'key':'value'}
>>>x={}
>>>y=x
>>>x['key']='value'
>>>y
>{'key':'value'}
>>>x.clear() #清空原始字典中的所有元素
>>>y
>{'key':'value'}
(2)copy
返回一个具有相同键值对的新字典(浅复制,不是副本)
>>>y=x.copy()
深复制:copy模块的deepcopy函数
(3)fromkeys
使用给定的键建立新的字典,每个键都对应一个默认的值None
>>>dict.formkeys(['name','age'],'value')
>['age':'value','name':'value']
(4)get
一般试图访问字典中不存在的项时会出错
>>>d={}
>>>d['name']
>报错
但是get访问一个不存在的键时,没有任何异常,得到了None值,或自定义返回值。
>>>print d.get('name')
>None
>>>>print d.get('name',‘N/A’)
>N/A
(5)has_key
检查字典中是否含有特定的键:d.has_key(k) 相当于k in d
(6)items 和 iteritems
items方法将字典所有的项以列表方式(每一项都表示为(键,值)对)返回,但无序。
>>>d={'k1':'v1','k2':'v2','k3':'v3'}
>>>d.items()
>[('k2','v2'),('k1','v1),('k3','v3')]
(7)keys和 iterkeys
keys将字典中的键以列表形式返回。
(8)pop
pop用来获得对应于给定键的值,然后将这个键值对从字典中移除。
>>>d={'x':1,'y':2}
>>>d.pop('x')
>1
>>>d
>{'y':2}
(9)popitem
list.pop弹出列表的最后一个元素,但popitem弹出随机项(因为字典无序)
(10)setdefault
类似于get,而且能够在字典不含有给定键的情况下设定相应的键值。
>>>d={}
>>> d.setdefault('name','N/A')
>N/A
>>>>d
>{'name':'N/A'}
>>>d['name']='gummy'
>>> d.setdefault('name','N/A')
>'gummy'
>>>>>d
>{'name':'gummy'}
(11)update
利用一个字典项更新另外一个字典,提供的字典中的项会被添加到旧字典中,若有相同的键会进行覆盖。
>>>d={'k1':'v1','k2':'v2','k3':'v3'}
>>>x={'k2':'v20'}
>>>d.update(x)
>>>d
>{'k1':'v1','k2':'v20','k3':'v3'}
(12)values和itervalues
values以列表的形式返回字典中的值,可以包含重复的元素(因为值是可以重复的)