python基础教程__列表、元组、字符串和字典

来源:转载

序列


在python中最基本的数据结构是序列。python中有六种内建的序列:列表、元组、字符串、unicode字符串、bugffer对象和xrange对象。所有序列都可以进行某些特定的操作,这些操作包括:索引、分片、加、乘、检查某个元素是否是序列成员、计算序列长度、找出最大最小的元素。


索引:序列中每个元素被分配一个序号即索引,序号从0开始。通过索引访问元素。使用负数索引时,python会从最后一个元素开始计数,最后一个元素的索引是-1.


>>> greeting="hello"
>>> greeting[0]
'h'
>>> greeting[-1]
'o'
>>>

分片:使用分片操作访问序列中一定范围内的元素,通过冒号相隔的两个索引来实现。第一个索引是需要提取部分的第一个元素的编号,最后的索引是分片之后剩余部分的第一个元素的编号。


>>> tag='python web site'
>>> tag[9:30]
'http://www.python.org'
>>> tag[32:-4]
'python web site'

若需要访问最后3个元素,有两种方法

#为了让分片部分包含列表的最后一个元素,必须提供最后一个元素的下一个元素对应的索引作为边界
>>> numbers[7:10]
[8, 9, 10] #若分片部分包括序列结尾的元素,只需要置空最后一个索引
>>> numbers[-3:]
[8, 9, 10] #同理,若分片部分包括序列开始的元素,只需要置空第一个索引
>>> numbers[:3]
[1, 2, 3] #复制整个序列则两个索引均置空
>>> numbers[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

进行分片时还有一个参数为步长,默认设置为1,分片操作即按照这个步长逐个遍历序列的元素,然后返回开始和结束之间的所有元素。步长不可以为0但是步长可以为负数。对于正数步长,python会从序列的头部开始向右提取元素,直到最后一个元素;而对于负数步长,则是从序列的尾部开始向左提取元素,直到第一个元素

>>> numbers[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[::-2]
[10, 8, 6, 4, 2]

序列相加:使用加号进行序列的连接操作,只有相同类型的序列才能进行连接操作,如列表和字符串是无法连接到一起的。


>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]
>>> 'hello'+'world'
'helloworld'
>>> [1,2,3]+'hello'
Traceback (most recent call last):
File "", line 1, in
TypeError: can only concatenate list (not "str") to list

乘法:用数字x乘以一个序列会生成新的序列,而在新的序列中,原来的序列会被重复x次。


>>> 'python'*5
'pythonpythonpythonpythonpython'

空列表可以简单的用两个中括号表示([]),但如果需要创建占用一定空间但不包括任何内容的列表可以采用以下方式。None是Python的内建值。

>>> sequence=[None]*10
>>> sequence
[None, None, None, None, None, None, None, None, None, None]

成员资格:运用in运算符检查一个元素是否在序列中。其返回的是布尔值,若存在则返回真否则返回假。


>>> permissions='rw'
>>> 'w' in permissions
True
>>> subject='$$$ get rich now $$$'
>>> '$$$' in subjectTrue

内建函数:len、min、max,len函数。len函数返回序列中所包含元素的数量,min函数和max函数则分别返回序列中最大和最小的元素。

列表


列表与字符串、元组不同之处在于列表是可以修改的。创建列表list函数可以将所有类型的序列创建为列表


>>> list('hello')
['h', 'e', 'l', 'l', 'o']

列表的基本操作1.改变列表进行元素赋值,不能为一个位置不存在的元素进行赋值2.删除元素,使用del语句实现


>>> name=['john','amy','jamie']
>>> del name[1]
>>> name
['john', 'jamie']

3.分片赋值:实现一次为多个元素赋值


#可以使用与原序列不等长的序列将分片替换
>>> name=list('perl')
>>> name
['p', 'e', 'r', 'l']
>>> name[1:]=list('ython')
>>> name
['p', 'y', 't', 'h', 'o', 'n']
#一次插入多个新元素
>>> name=[1,5]
>>> name[1:1]=[2,3,4]
>>> name
[1, 2, 3, 4, 5]
#一次删除多个元素
>>> name[1:4]=[]
>>> name
[1, 5]

列表的方法1.append方法用来在列表末尾追加新的对象。


#使用lst命名而不用list的原因是list是Python的一个内建函数
>>> lst=[1,2,3]
>>> lst.append(4)
>>> lst
[1, 2, 3, 4]

2.count方法,统计某个元素在列表中出现的次数

>>> ['to','be','to','or','not','be'].count('to')
2

3.extend方法,用新列表扩展原有的列表

>>> a=[1,2,3]
>>> b=[4,5,6]
>>> b.extend(a)
>>> b
[4, 5, 6, 1, 2, 3]

它与连接方法的区别是,extend修改的是原始列表即列表b,而连接方法则是返回一个新的对象并没有改变原始列表


4.index方法,用于从列表中找出某个值第一个匹配项的索引位置


>>> knights=['i','like','big','hero']
>>> knights.index('big')
2

5.insert方法将对象插入列表


>>> numbers=[1,2,3,5,6]
>>> numbers.insert(3,'four')
>>> numbers
[1, 2, 3, 'four', 5, 6]

6.pop方法移除列表中的一个元素(默认是最后一个元素),并且返回该元素的值

[1, 2, 3, 'four', 5, 6]
>>> numbers.pop()
6
>>> numbers.pop(2)
3

7.remove方法用于移除列表中某个值的第一个匹配项

>>> numbers
[1, 2, 'four', 5, 'four']
>>> numbers.remove('four')
>>> numbers
[1, 2, 5, 'four']

8.reverse方法将列表中的元素反向存放


9.sort方法用于在原位置对列表进行排序


sort方法修改了x但是返回的却是空值,所以print y的结果为None


>>> x=[4,3,5,1,9,7]
>>> y=x.sort()
>>> print y
None

若需要保留排序前的副本应该按以下方法

>>> x=[3,4,2,7,1,9,0]
#不可以直接使用y=x这样x,y则是表示的同一个对象,当x排序后,y的值也会同样发生变化
>>> y=x[:] >>> x.sort()
>>> x
[0, 1, 2, 3, 4, 7, 9]
>>> y
[3, 4, 2, 7, 1, 9, 0]

另为一种获取已排序列表副本的方法就是使用sorted()函数

>>> x=[6,1,3,9,7,0]
>>> y=sorted(x)
>>> x
[6, 1, 3, 9, 7, 0]
>>> y
[0, 1, 3, 6, 7, 9]

10.高级排序,sort函数有两个可选参数即key和reverse使用key参数时,必须提供一个在排序过程中使用的函数,但是该函数并不是直接用来确定对象的大小,而是为每个元素创建一个键,然后所有元素根据键来排序。因此根据长度进行排序,可以使用len作为函数


>>> x=['addddd','dinj','ad']
>>> x.sort(key=len)
>>> x
['ad', 'dinj', 'addddd']

reverse是简单的布尔值,用来指明列表是否要进行反向排序

元组


创建元组只需要用逗号分隔一些值,元组大部分使用()括起来的,空元组即没有包含内容的圆括号,实现一个数值的元组也必须加上一个逗号。创建元组


>>> 34,2,5
(34, 2, 5)
>>> 33,
(33,)

元组的方法1.tuple函数作用同list函数,将序列转化为元组2.元组的分片和访问同列表一样。

字符串


字符串格式化使用字符串格式化操作符(%)来实现,使用方法如下


>>> format="hello, %s. %s enough for ya?" #s表示会被格式化为字符串
>>> values=('world','hot')
>>> print format % values
hello, world. hot enough for ya?

PS:如果要在格式化字符串里面包括百分号,那么必须使用%%


如果需要格式化实数,可以使用f说明符类型,同时提供所需要的精度。使用方法如下

>>> format="Pi with three decimals: %.3f"
>>> from math import pi
>>> print format % pi
Pi with three decimals: 3.142
>>> '%10f' % pi #10代表字段宽度
' 3.141593'
>>> '%10.2f' % pi #小数点右侧的数字2代表精度
' 3.14'

字符串的方法1.find方法:在一个较长的字符串中查找子字符串,返回子字符串所在位置的最左端索引,如果没有找到则返回的是-12.join方法:是split逆方法,用来在队列中添加元素


>>> seq=['1','2','3','4']
>>> sep='+'
>>> seq.join(sep)
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'list' object has no attribute 'join'
>>> sep.join(seq)
'1+2+3+4'

3.lower方法:返回字符串的小写字母版4.replace方法:返回某字符串的所有匹配项均被替换之后得到的字符串。5.split方法,join的逆方法,将字符串分割成序列


>>> '1+2+3+4'.split('+')
['1', '2', '3', '4']

6.strip方法返回去除两侧空格的字符串7.translate方法和replace方法类似,可以替换掉字符串中的某些部分,但是translate只处理单个字符,并且可以同时进行多个替换,有时候效率比replace要高。

字典


字典是Python中唯一内建的映射类型,字典中的值没有特殊的顺序,都存储在一个特定的key里。字典是由多个键及其对应的值构成的对组成,键和值之间用(:)隔开,每个对之间用(,)隔开,整个字典用({})括起来。空字典由两个大括号组成。键可以为任何不可变类型,列表不能为键因为列表是可变的。创建字典可以通过以下方式


>>> phonebook={'alice':'123','bob':'333','john':'234'}

1.dict函数,通过映射建立字典


>>> items=[('name','bob'),('age',33)]
>>> d=dict(items)
>>> d
{'age': 33, 'name': 'bob'}
>>> d=dict(name='bob',age=43)
>>> d
{'age': 43, 'name': 'bob'}

2.基本字典操作

len(d)返回d中项(键值对)的数量
d[k]返回关联到键k上的值
d[k]=v将v值关联到键k上
del d[k] 删除键为k的项

k in d 检查d中是否含有键k


1.clear清除字典中所有的项,这是原地操作,返回None2.copy方法返回一个具有相同键值对的新字典,是浅拷贝3.fromkeys方法使用给定的键建立新的字典,每个键对应的默认值为None

>>> {}.fromkeys(['names','ages'])
{'ages': None, 'names': None}

4.get方法是更宽松的访问字典项的方法,示例如下


>>> d={}
>>> print d['name']
Traceback (most recent call last):
File "", line 1, in
KeyError: 'name'
>>> print d.get('name')
None

5.has_key方法可以检查字典中是否含有该键,相当于 k in d 6.items和iteritems:items方法将字典中的项以列表的形式返回,返回时没有特殊的顺序。iteritems方法的作用同items但是它返回的是一个迭代器对象。很多情况下使用iteritems更加高效。

>>> d={'title':'python web site','url':'http://www.python.org','spam':0}
>>> d.items()
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'python web site')]
>>> d.iteritems()

>>> list(d.iteritems())
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'python web site')]

7.key方法将字典中的键以列表的形式返回,而iterkeys则返回的是针对键的迭代器。8.pop方法用来获得对应于给定键的值,并将这个键值对从字典移除9.popitem方法类似于list.pop,但不同于它的是字典弹出的是一个随即项。10.setdefault方法类似于get方法,在字典中不含有给定键的情况下设定相应的键值,并能够获得与给定键相关联的值

>>> d={}
>>> d.setdefault('name','unknow')
'unknow'
>>> d['name']='bob'
>>> d.setdefault('name','unknow')
'bob'

当键不存在时,setdefault返回默认值并更新字典,当键存在时,setdefault返回与其对应的值,但不改变字典。11.update方法利用一个字典项更新另一个字典。12.values方法以列表的形式返回字典中的值(itervalues返回值的迭代器)

分享给朋友:
您可能感兴趣的文章:
随机阅读: