数据结构

2017-05-24  本文已影响0人  又见倾心

序列(如列表和元组)、映射(如字典)以及集合(set)是三类主要的数据结构(也称为容器)。


序列(列表、元组和字符串)——列表为可变的(可修改),元组和字符串是不可变的(不可修改)。

序列中的每个元素都有自己的编号。Python中有6种内建的序列:列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。

1.列表

(1)创建

list=[ ]

(2)list函数:通过list函数(其实list是一种类型而不是函数)对字符串创建列表非常有效

list 3=list("hello")

print list 3

输出为:[‘h’, ‘e’, ‘l’, ‘l’, ‘o’]

2.元组

(1)创建

t1=1,2,3

t2="jeffreyzhao","cnblogs"

t3=(1,2,3,4)

t4=()  #空元组可以用没有包含内容的圆括号来表示

t5=(1,)  #只含一个值的元组,必须加个逗号(,)

print t1,t2,t3,t4,t5  #逗号分隔一些值,元组自动创建完成

输出为:(1, 2, 3) (‘jeffreyzhao’, ‘cnblogs’) (1, 2, 3, 4) () (1,) #元组大部分时候是通过圆括号                                                                                                             括起来的

(2)tuple 函数

t1=tuple([1,2,3])  #注意符号

t2=tuple("jeff")  #当只有()时,括号中只能是1个字符或字符串,且不能为数字;否则就会报错

t3=tuple((1,2,3)) #注意符号

printt1

printt2

printt3

3.字符串

(1)创建

str1='Hello world'

print str1  #输出字符串:Hello world

print str1[0] #输出字符串的第一个字符:H

for c in str1:

print c    #将字符串中的所有字符进行单个输出:H  e  l  l  o     w  o  r  l  d

(2)格式化

字符串格式化使用字符串格式化操作符即百分号%来实现:

str='Hello,%s' % 'world'

print str1


格式化操作符的右操作数可以是任何东西,如果是元组或者映射类型(如字典),那么字符串格式化将会有所不同

strs='Hello','world'#元组中字符串格式化

str1='%s,%s' %strs

print str1

d={'h':'Hello','w':'world'}#字典中字符串格式化

str1='%(h)s,%(w)s' %d

print str1


注意:如果需要转换的元组作为转换表达式的一部分存在,那么必须将它用圆括号括起来:

str1='%s,%s' % ('Hello','world') #此处若没有圆括号,则会报错

print str1


str1='%s%%' %100 #输出%,用2个%

print str1


对数字进行格式化处理,通常需要控制输出的宽度和精度:

from math import pi

str1='%.2f' %pi#精度为2,输出3.14

print str1

str1='%10f' %pi#字段宽度为10,输出  3.141593(前面有2个空格,总长度为10)

print str1

str1='%10.2f' %pi #字段10,精度2

print str1


Python中在string模块还提供另外一种格式化值的方法:模板字符串。它的工作方式类似于很多UNIX Shell里的变量替换,如下所示:

from string import Template

str1=Template('$x,$y!')  #使用关键字参数进行格式化

str1=str1.substitute(x='Hello',y='world')

print str1 #Hello,world!

如果替换字段是单词的一部分,那么参数名称就必须用括号括起来,从而准确指明结尾:

from string import Template

str1=Template('Hello,w${x}d!')

str1=str1.substitute(x='orl')

print str1  #Hello,world!


from string import Template

str1=Template('$x$$') #需要输出$时,输入2个$(同需输出%方法相同)

str1=str1.substitute(x='100')

print str1 #100$


除了关键字参数之外,模板字符串还可以使用字典变量提供键值对进行格式化:

from string import Template

d={'h':'Hello','w':'world'}

str1=Template('$h,$w!')  #可以使用字典变量提供键值对进行格式化

str1=str1.substitute(d)

print str1 #Hello,world!

4.通用序列操作(方法)

这些操作包括:索引(indexing)、分片(sliceing)、加(adding)、乘(multiplying)以及检查某个元素是否属于序列的成员。除此之外,还有计算序列长度、最大最小元素等内置函数.

(1)索引

索引从0(从左向右)开始,所有序列可通过这种方式进行索引。

str1='Hello'

nums=[1,2,3,4]

t1=(123,234,345)

print str1[0] #输出为:H

print nums[1] #输出为:2

print t1[2] #输出为:345

索引可以从最后一个位置(从右向左)开始,编号是-1

str1='Hello'

nums=[1,2,3,4]

t1=(123,234,345)

print str1[-1] #输出为o

print nums[-2] #输出为:3

print t1[-3] #输出为123

(2)分片

分片操作用来访问一定范围内的元素。分片通过冒号相隔的两个索引来实现:

nums=range(10)

print nums #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print nums[1:5] #[1, 2, 3, 4]

print nums[1:] #[1, 2, 3, 4, 5, 6, 7, 8, 9]

print nums[-3:-1] #[7, 8]

print nums[-3:] #[7, 8, 9]

print nums[:] #复制整个序列[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

不同的步长,有不同的输出:

nums=range(10)

print nums[0:10]#默认步长为1, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print nums[0:10:2]#步长为2,[0, 2, 4, 6, 8]

print nums[0:10:-2]#步长为-2, [ ]

(3)序列相加(只能是同类型的数据进行相加)

str1='Hello'

str2=' world'

print str1+str2 #Hello world

num1=[1,2,3] 

num2=[2,3,4]

print num1+num2 #[1, 2, 3, 2, 3, 4](相同数字仍然会出现)

print str1+num1 #报错:数据类型错误

(4)乘法 

print [None]*10  #[None, None, None, None, None, None, None, None, None, None]

str1='Hello'

print str1*2  #HelloHello

num1=[1,2]

print num1*2  #[1, 2, 1, 2]

print str1*num1  #报错:数据类型错误

(5)成员资格

in运算符会用来检查一个对象是否为某个序列(或者其他类型)的成员(即元素):

str1='Hello'

print 'h' in str1 #False

print 'H' in str1  #True

(6)长度、最大最小值

通过内建函数len、max和min可以返回序列中所包含元素的数量、最大和最小元素。

str1='Hello'

print len(str1) #5

print max(str1) #o

print min(str1) #H

num1=[1,2,1,4,123]

print max(num1) #123

print min(num1) #1

格式化操作符的右操作数可以是任何东西,如果是元组或者映射类型(如字典),那么字符串格式化将会有所不同。

注意:如果需要转换的元组作为转换表达式的一部分存在,那么必须将它用圆括号括起来:

str1='%s%%' %100#输出%,用2个%

print str1

str1='%s%%' %100#输出%,用2个%

print str1

str1='%s%%' %100#输出%,用2个%

print str1

str1='%s%%' %100#输出%,用2个%

print str1

str1='%s%%' %100#输出%,用2个%

print str1

str1='%s%%' %100#输出%,用2个%

print str1

二、映射(字典)

映射中的每个元素都有一个名字,这个名字专业的名称叫键。字典(也叫散列表)是Python中唯一内建的映射类型。

1、键类型

字典的键可以是数字、字符串或者是元组,键必须唯一。在Python中,数字、字符串和元组都被设计成不可变类型,而常见的列表以及集合(set)都是可变的,所以列表和集合不能作为字典的键。键可以为任何不可变类型,这正是Python中的字典最强大的地方。

d={}  #定义空字典

d[1]=1 #对空字典中的key=1进行赋值1

print d #打印字典,输出{1:1}

list1=["hello,world"] #列表为可变的

set1=set([123]) #集合为可变的

d[list1]="Hello world."

d[set1]=123

print d  #当键为可变类型时,报错

2、自动添加

即使键在字典中并不存在,也可以为它分配一个值,这样字典就会建立新的项。

3、成员资格

表达式item in d(d为字典)查找的是键(containskey),而不是值(containsvalue)。

字典的操作方法可参见官方文档。

三、集合

集合set就是由序列(或者其他可迭代的对象)构建的。集合的几个重要特点和方法如下:

1、副本是被忽略的

set1=set([0,1,2,3,0,1,2,3,4,5])

print set1 #集合内存在相同参数时,进行合并,只出现一次:set([0, 1, 2, 3, 4, 5]) 

set2=set([0,1,2,3,4,5])

print set2  #set([0, 1, 2, 3, 4, 5])

2、集合元素的顺序是随意的

strs=set(['jeff','wong','cnblogs'])

print strs #set([‘wong’, ‘cnblogs’, ‘jeff’])

3、集合常用方法

(1)并集:可用“union”或“|”

set1=set([1,2,3])

set2=set([2,3,4])

set3=set1.union(set2)

set4=set1|set2

print set3 #set([1, 2, 3, 4])

print set4 #set([1, 2, 3, 4])

(2)交集:用“&”

set1=set([1,2,3])

set2=set([2,3,4])

set3=set1&set2

print set3 #set([2, 3])


python set() 集合操作符号、数学符号

上一篇 下一篇

猜你喜欢

热点阅读