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