數(shù)據(jù)結(jié)構(gòu)

序列(如列表和元組)、映射(如字典)以及集合(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é)符號

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容