数据结构

序列(如列表和元组)、映射(如字典)以及集合(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() 集合操作符号、数学符号

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容