序列(如列表和元組)、映射(如字典)以及集合(set)是三類主要的數(shù)據(jù)結(jié)構(gòu)(也稱為容器)。
序列(列表、元組和字符串)——列表為可變的(可修改),元組和字符串是不可變的(不可修改)。
序列中的每個元素都有自己的編號。Python中有6種內(nèi)建的序列:列表、元組、字符串、Unicode字符串、buffer對象和xrange對象。
1.列表
(1)創(chuàng)建
list=[ ]
(2)list函數(shù):通過list函數(shù)(其實list是一種類型而不是函數(shù))對字符串創(chuàng)建列表非常有效
list 3=list("hello")
print list 3
輸出為:[‘h’, ‘e’, ‘l’, ‘l’, ‘o’]
2.元組
(1)創(chuàng)建
t1=1,2,3
t2="jeffreyzhao","cnblogs"
t3=(1,2,3,4)
t4=()? #空元組可以用沒有包含內(nèi)容的圓括號來表示
t5=(1,)? #只含一個值的元組,必須加個逗號(,)
print t1,t2,t3,t4,t5? #逗號分隔一些值,元組自動創(chuàng)建完成
輸出為:(1, 2, 3) (‘jeffreyzhao’, ‘cnblogs’) (1, 2, 3, 4) () (1,) #元組大部分時候是通過圓括號? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?括起來的
(2)tuple 函數(shù)
t1=tuple([1,2,3]) ?#注意符號
t2=tuple("jeff") ?#當(dāng)只有()時,括號中只能是1個字符或字符串,且不能為數(shù)字;否則就會報錯
t3=tuple((1,2,3))?#注意符號
printt1
printt2
printt3
3.字符串
(1)創(chuàng)建
str1='Hello world'
print str1? #輸出字符串:Hello world
print str1[0] #輸出字符串的第一個字符:H
for c in str1:
print c? ? #將字符串中的所有字符進(jìn)行單個輸出:H ?e ?l ?l ?o ? ? w ?o ?r ?l ?d
(2)格式化
字符串格式化使用字符串格式化操作符即百分號%來實現(xiàn):
str='Hello,%s' % 'world'
print str1
格式化操作符的右操作數(shù)可以是任何東西,如果是元組或者映射類型(如字典),那么字符串格式化將會有所不同。
strs='Hello','world'#元組中字符串格式化
str1='%s,%s' %strs
print str1
d={'h':'Hello','w':'world'}#字典中字符串格式化
str1='%(h)s,%(w)s' %d
print str1
注意:如果需要轉(zhuǎn)換的元組作為轉(zhuǎn)換表達(dá)式的一部分存在,那么必須將它用圓括號括起來:
str1='%s,%s' % ('Hello','world') #此處若沒有圓括號,則會報錯
print str1
str1='%s%%' %100 #輸出%,用2個%
print str1
對數(shù)字進(jìn)行格式化處理,通常需要控制輸出的寬度和精度:
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!')? #使用關(guān)鍵字參數(shù)進(jìn)行格式化
str1=str1.substitute(x='Hello',y='world')
print str1 #Hello,world!
如果替換字段是單詞的一部分,那么參數(shù)名稱就必須用括號括起來,從而準(zhǔn)確指明結(jié)尾:
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$
除了關(guān)鍵字參數(shù)之外,模板字符串還可以使用字典變量提供鍵值對進(jìn)行格式化:
from string import Template
d={'h':'Hello','w':'world'}
str1=Template('$h,$w!')? #可以使用字典變量提供鍵值對進(jìn)行格式化
str1=str1.substitute(d)
print str1 #Hello,world!
4.通用序列操作(方法)
這些操作包括:索引(indexing)、分片(sliceing)、加(adding)、乘(multiplying)以及檢查某個元素是否屬于序列的成員。除此之外,還有計算序列長度、最大最小元素等內(nèi)置函數(shù).
(1)索引
索引從0(從左向右)開始,所有序列可通過這種方式進(jìn)行索引。
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)分片
分片操作用來訪問一定范圍內(nèi)的元素。分片通過冒號相隔的兩個索引來實現(xiàn):
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[:] #復(fù)制整個序列[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
不同的步長,有不同的輸出:
nums=range(10)
print nums[0:10]#默認(rèn)步長為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)序列相加(只能是同類型的數(shù)據(jù)進(jìn)行相加)
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](相同數(shù)字仍然會出現(xiàn))
print str1+num1 #報錯:數(shù)據(jù)類型錯誤
(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? #報錯:數(shù)據(jù)類型錯誤
(5)成員資格
in運(yùn)算符會用來檢查一個對象是否為某個序列(或者其他類型)的成員(即元素):
str1='Hello'
print 'h' in str1 #False
print 'H' in str1? #True
(6)長度、最大最小值
通過內(nèi)建函數(shù)len、max和min可以返回序列中所包含元素的數(shù)量、最大和最小元素。
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
格式化操作符的右操作數(shù)可以是任何東西,如果是元組或者映射類型(如字典),那么字符串格式化將會有所不同。
注意:如果需要轉(zhuǎn)換的元組作為轉(zhuǎn)換表達(dá)式的一部分存在,那么必須將它用圓括號括起來:
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
二、映射(字典)
映射中的每個元素都有一個名字,這個名字專業(yè)的名稱叫鍵。字典(也叫散列表)是Python中唯一內(nèi)建的映射類型。
1、鍵類型
字典的鍵可以是數(shù)字、字符串或者是元組,鍵必須唯一。在Python中,數(shù)字、字符串和元組都被設(shè)計成不可變類型,而常見的列表以及集合(set)都是可變的,所以列表和集合不能作為字典的鍵。鍵可以為任何不可變類型,這正是Python中的字典最強(qiáng)大的地方。
d={} ?#定義空字典
d[1]=1 #對空字典中的key=1進(jìn)行賦值1
print d #打印字典,輸出{1:1}
list1=["hello,world"] #列表為可變的
set1=set([123]) #集合為可變的
d[list1]="Hello world."
d[set1]=123
print d ?#當(dāng)鍵為可變類型時,報錯
2、自動添加
即使鍵在字典中并不存在,也可以為它分配一個值,這樣字典就會建立新的項。
3、成員資格
表達(dá)式item in d(d為字典)查找的是鍵(containskey),而不是值(containsvalue)。
字典的操作方法可參見官方文檔。
三、集合
集合set就是由序列(或者其他可迭代的對象)構(gòu)建的。集合的幾個重要特點(diǎn)和方法如下:
1、副本是被忽略的
set1=set([0,1,2,3,0,1,2,3,4,5])
print set1 #集合內(nèi)存在相同參數(shù)時,進(jìn)行合并,只出現(xiàn)一次: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() 集合操作符號、數(shù)學(xué)符號