[python]-day2

數(shù)據(jù)類型

數(shù)據(jù)類型由三部分組成身份(id)、類型(type)、值。
看對(duì)象有沒(méi)有改變使用id(object)查看對(duì)象的內(nèi)存地址是否改變蛹磺。

def compare(a,b):
  if a is b:  #a和b是同一個(gè)對(duì)象
    statements
  if a == b:  #a和b具有相同的值
    statements
  if type(a) =type(b):  #a和b具有相同的類型
    statements

python能直接處理的數(shù)據(jù)類型有以下幾種(type)
數(shù)值number:整數(shù)int,長(zhǎng)整型long同仆,浮點(diǎn)數(shù)float #python3中l(wèi)ong不存在萤捆,int可以存儲(chǔ)64位整數(shù)
布爾值bool:True、False #注意大小寫(xiě)俗批,在與數(shù)值運(yùn)算時(shí)俗或,True的值為1,F(xiàn)alse的值為0
空值:None
字符串:str
線性容器:list扶镀,tuple #支持迭代蕴侣,字符串也是一種線性容器
Hash容器:dict,set

如果對(duì)象的值是可以修改的臭觉,則稱為可變對(duì)象(mutable)昆雀,否則成為不可變對(duì)象(immutable)辱志。

可以進(jìn)行對(duì)象類型和值的對(duì)比。其他比較操作符也支持>狞膘、<揩懒、>=、<=挽封、!=已球、==,邏輯操作符and辅愿、or智亮、not

數(shù)值

查看int對(duì)象所具有的方法:help(int),dir(int),int.doc

bit_length(Number of bits necessary to represent self in binary.返回表示該數(shù)字的時(shí)占用的最少位數(shù))

a = 1
print a.bit_length()

二進(jìn)制符號(hào)

  • 位移 >> <<
    x << y \ x >> y #左移(補(bǔ)0)和右移(切尾)是基于二進(jìn)制的一種算法 >>、 <<,使用bin函數(shù)查看二進(jìn)制
    x << y == x * ( 2 ** y )
    可用于計(jì)算硬盤容量点待,比如 1024 >> 10

  • 按位與 &
    二進(jìn)制靠右對(duì)齊阔蛉,不足補(bǔ)0,比較位置都是1則返回1癞埠,其他位返回0
    可用于奇偶數(shù)判斷,數(shù)值與1進(jìn)行&運(yùn)算状原,返回0則為偶數(shù),返回1則為奇數(shù):5 & 1 == 1

  • 按位或 |
    二進(jìn)制靠右對(duì)齊苗踪,不足補(bǔ)0颠区,比較位置只要有1,則返回1

  • 按位異或 ^
    比較位相異返回1通铲,相同返回0

  • 按位取反 ~

    ?

字符串

python默認(rèn)ascii碼毕莱。使用單引號(hào)和雙引號(hào)效果一樣。
跟C語(yǔ)言類似测暗,可以使用\進(jìn)行轉(zhuǎn)義:\n換行央串,\t制表符,\r回車符碗啄,\0空值(Null)

如果長(zhǎng)字符串需要跨越多行,有如下三種方法:

  • 使用'''xxxxxxxx'''代替普通引號(hào)
  • 使用三個(gè)"""xxxxxxxx"""
  • 在每行最后加上\將換行符轉(zhuǎn)義稳摄。

原始字符串:如果在字符串前加上r稚字,即輸出引號(hào)中原始字符串 print r'let's go!',不能在原始字符串尾部輸入\厦酬,除非對(duì)其進(jìn)行轉(zhuǎn)義
字符串的索引:a[0],字符串偏移量從0開(kāi)始胆描,最后一位從-1開(kāi)始。字符串的值不可原地改變仗阅。
+為字符串的拼接昌讲,*為字符串的重復(fù)

查看字符串具有的方法:help(str),dir(str)
count(self, sub, start=None, end=None):用于統(tǒng)計(jì)字符串里某個(gè)字符出現(xiàn)的次數(shù),可選參數(shù)為在字符串搜索的開(kāi)始與結(jié)束位置。sub –> 搜索的子字符串减噪,start –> 字符串開(kāi)始搜索的位置短绸。默認(rèn)為第一個(gè)字符,第一個(gè)字符索引值為0车吹。end –> 字符串中結(jié)束搜索的位置。字符中第一個(gè)字符的索引為 0醋闭。默認(rèn)為字符串的最后一個(gè)位置。
decode(self, encoding=None, errors=None):解碼证逻,對(duì)于len在處理漢字的時(shí)候因?yàn)榉祷氐氖亲止?jié)數(shù)目導(dǎo)致結(jié)果不符乐埠,可以使用decode轉(zhuǎn)碼,或者len(u"哈哈")
encode(self, encoding=None, errors=None):編碼囚企,針對(duì)unicode
find(self, sub, start=None, end=None):檢測(cè)字符串中是否包含子字符串str丈咐,如果指定beg(開(kāi)始)和end(結(jié)束)范圍,則檢查是否包含在指定范圍內(nèi)龙宏,如果包含子字符串返回開(kāi)始的索引值棵逊,否則返回-1。
isalnum(self):法檢測(cè)字符串是否由字母和數(shù)字組成烦衣,如果string至少有一個(gè)字符并且所有字符都是字母或數(shù)字則返回True,否則返回False
isalpha(self):
split: S.split([sep [,maxsplit]]) -> list of strings返回一個(gè)list
join:
replace:
translate:
示例:打印出字符串中的字符及其位置

a = 'shsh'
for i in range(len(a)):
    print '(%d)' % i,a[i]

也可以使用enumerate()函數(shù):

a = 'shsh'
for i,ch in enumerate(a):
      print '(%d)' % i,ch

示例:取出字符串中的數(shù)字

a = "aAsmr3idd4bgs7Dlsf9eAF"
print ''.join([x for x in a if x.isdigit()])

示例:字符串的拼接
1.c = a + b
2.c = "{a}歹河" .format(a=a,b=b)
3.c = "%s%s" % (a,b)
4.c="".join([a,b])

str和repr

str函數(shù)用于將值轉(zhuǎn)化為適用于人閱讀的形式,相當(dāng)于to string
repr函數(shù)轉(zhuǎn)化為供解釋器讀取的形式花吟,創(chuàng)建一個(gè)合法的字符串表示值秸歧,repr(x)等同x
print '1+2='+1+2

字符串格式化format

在Python中,采用的格式化方式和C語(yǔ)言是一致的衅澈,用%實(shí)現(xiàn)键菱;
有幾個(gè)%?今布,后面就跟幾個(gè)變量经备,順序需要一致(只有一個(gè)變量的時(shí)候,括號(hào)可以省略)部默;如果不太確認(rèn)用什么侵蒙,可以直接使用%s將任何數(shù)據(jù)類型轉(zhuǎn)換為字符串;
字符串里含%可用%%進(jìn)行轉(zhuǎn)義傅蹂,來(lái)表示一個(gè)%纷闺;
可以在"%"和字母之間插進(jìn)數(shù)字表示最大場(chǎng)寬。 例如: %3d 表示輸出3位整型數(shù), 不夠3位右對(duì)齊份蝴。 %9.2f 表示輸出場(chǎng)寬為9的浮點(diǎn)數(shù), 其中小數(shù)位為2, 整數(shù)位為6, 小數(shù)點(diǎn)占一位, 不夠9位右對(duì)齊犁功。
%d 整數(shù) :print "1+1 = %d " % int(1+1)
%f 浮點(diǎn)數(shù)
%s 字符串 : print "my name is %s lilei" % "hanmeimei's"
%x 十六進(jìn)制整數(shù)
'%s is a %s' % ('he','boy')
字典形式的字符串的格式化更加靈活,注意花括號(hào)的位置

'%(who)s is a %(gender)s' %{'who':'he','gender':'boy'}
"this is {whose} {fruit}" .format (fruit = "apple" , whose = "my")

list 列表

方括號(hào)中婚夫,逗號(hào)分隔浸卦,索引下標(biāo)從0開(kāi)始。類型可變案糙,元素的類型可以不同限嫌,可以包含任意類型的python對(duì)象靴庆。支持嵌套,list里也可以包含一個(gè)list萤皂∪銮睿可原地修改內(nèi)容。

創(chuàng)建一個(gè)空列表:
names = []
names = list()

有序集合
classmate = ['Micherl','Bob','Marry']
len(classmate)裆熙,max(classmate),min(classmate)
classmate[0] classmate[-1] #取值
classmate[1]='Kack' #賦值端礼,不能賦值超過(guò)列表長(zhǎng)度,可以先進(jìn)行初始化入录,再進(jìn)行賦值
del classmate[1] #刪除元素蛤奥,后面元素前移
'Marry' in classmate #in or not in判斷元素是否在列表中
classmate.index('Micherl')
使用+運(yùn)算符可以連接列表

列表的方法

classmate.append('Adam') #追加,返回值并不是新的list,而是none
classmate.count('Bob') #某元素出現(xiàn)次數(shù)
classmate1.extend(classmate2) #將b擴(kuò)展到a后面僚稿,a的列表刷新了
classmate.index('Bob') #值追索引
classmate.insert(1,'Jack') #1至后面的元素集體后移凡桥,插隊(duì)
classmate.pop(1) #退出最后一個(gè)元素,與append類似棧蚀同,后進(jìn)先出
classmate.remove('Bob') #刪除第一個(gè)匹配元素
classmate.reverse #元素反向
sort方法:
x=[1,3,2,6,4]
y=x[:] #不能簡(jiǎn)單的y=x.sort()因?yàn)閟ort方法無(wú)返回值缅刽,也可以使用sorted(x),可以返回排序后的列表
y.sort()
print x
print y

分片

classmate[1:2] 第一個(gè)索引包含在分片內(nèi)蠢络,第二個(gè)索引不包含在分片內(nèi)衰猛,一般第三個(gè)參數(shù)默認(rèn)為1,步長(zhǎng)如果為負(fù)數(shù)刹孔,則從右到左提取元素啡省。
分片賦值 classmate[2:]='a' 相當(dāng)于替換元素
分片刪除 del classmate[2:]
列表可以進(jìn)行相加 print [1,2,3]+[3,4],相同類型才能進(jìn)行相加,如列表和字符串不能進(jìn)行加減
乘法:序列乘以數(shù)值髓霞,則序列會(huì)被重復(fù)數(shù)值次數(shù)卦睹,
空值 None 如果要初始化一個(gè)長(zhǎng)度為10的空序列 seq=[None]*10
檢查一個(gè)值是否在序列中 'Micherl' in classmate 返回布爾值

列表、元組和字典字面量可以在不使用續(xù)行符()的情況下分步多行方库,另外最后一項(xiàng)允許跟一個(gè)逗號(hào)

a = [1,
3,4,
  "hello",
]

列表深復(fù)制和淺復(fù)制

淺復(fù)制:

a=[1,2,[3,4]]
b=a
b is a #b和a指向同一個(gè)對(duì)象
del b  
print a  #刪除b后结序,既刪除b的指向,a無(wú)變化
print b
b=list(a)  #創(chuàng)建一個(gè)a的淺復(fù)制
b is a   #False
b.append(100)  #給b追加一個(gè)元素
print a    #a無(wú)變化
print b    #b增加了一個(gè)元素
b[2][0]=-100
print a
print b #注意a的變化
c=a
del c[:]
print a
print c

深復(fù)制將創(chuàng)建一個(gè)新的對(duì)象纵潦,并且遞歸復(fù)制它所包含的所有對(duì)象

import copy
a = [1,2,[3,4]]
b = copy.deepcopy(a)
b[2][0] = -100
print a
print b

列表推導(dǎo)式

[expr for iter_var in iterable] :首先迭代iterable里所有的內(nèi)容笼痹,每一次迭代都把iterable中的內(nèi)容放到iter_var中,再在表達(dá)式中應(yīng)用該iter_var的內(nèi)容酪穿,最后用表達(dá)式計(jì)算值生成一個(gè)列表。
[x+1 for x in range(1:11)]
可以這樣理解這個(gè)推導(dǎo)式
new_list=[]
for x in range(1:11)
new_list.append(x+1)
print new_list

[expr for iter_var in iterable if cond_expr] :加入了判斷語(yǔ)句晴裹,只有滿足cond_expr條件的才把iterable丟到iter_var被济,最后用表達(dá)式生成列表
[x+1 for x in range(1:11) if x % 2 == 1]
生成字符串:['the %s' % d for d in xrange(10)]
生成元組:[(x,y) for x in range(2) for y in range(2)]
生成字典:dict([(x,y) for x in range(3) for y in range(3)])
g = {i:j.upper() for i,j in zip(range(1,6),'abcde')}

zip函數(shù)

zip(s,t)函數(shù)將列表s和列表t組成一個(gè)元組列表(s[0],t[0])、(s[1].t[1])等涧团,如果s和t長(zhǎng)度不等只磷,則以短的長(zhǎng)度為止经磅。

zip函數(shù)在python2中會(huì)完全創(chuàng)建一個(gè)元組列表库糠,函數(shù)itertools.izip一次只生成一個(gè)元組眷蜈,性能較好

xrange and range

range:直接生成一個(gè)列表對(duì)象
xrange:生成一個(gè)xrange對(duì)象。當(dāng)需要生成比較大的數(shù)據(jù)攻谁,內(nèi)存比較緊張元媚,xrange比較省內(nèi)存轧叽。xrange一般用在循環(huán)里面,比如只需要操作部分?jǐn)?shù)據(jù)刊棕,而不是返回全部元素來(lái)完成操作的情況
for m in range(1000): #一次性生成1000個(gè)數(shù)字
if m == 10:
print "ss"
break
for m in xrange(1000): #只生成10個(gè)數(shù)字
if m == 10:
print "ss"
break
在python3種xrange()函數(shù)已經(jīng)更名為range()炭晒,并且已經(jīng)刪除了老式range()函數(shù)的功能。

tuple 元組

一旦初始化就不能修改甥角,括號(hào)网严,逗號(hào)分隔。不能原地修改嗤无,不能排序震束。

classmates = ('Michael', 'Bob', 'Tracy')
tuple的陷阱:當(dāng)你定義一個(gè)tuple時(shí),在定義的時(shí)候当犯,tuple的元素就必須被確定下來(lái)垢村,
只有1個(gè)元素的tuple定義時(shí)必須加一個(gè)逗號(hào),防止歧義(以下兩種方式都可以)

t = (1,)
t = 1,    #即使沒(méi)有圓括號(hào),python也可以識(shí)別出元組

以下示例看起來(lái)元組被改變了灶壶,查看id發(fā)現(xiàn)元組對(duì)象已經(jīng)被改變了
a = (1,2)
b = list(a)
type(b)
b[0] = 5
a = tuple(b)
print a
type(a)

dict 字典

花括號(hào)肝断,逗號(hào)分隔,key和value使用冒號(hào)分隔驰凛,key唯一胸懈,value不一定唯一.無(wú)序,不能通過(guò)偏移取值恰响∪で可變類型,可嵌套胚宦。

創(chuàng)建一個(gè)空字典
d = {}
d = dict()
組成字典的鍵必須是不可變的數(shù)據(jù)類型首有,比如數(shù)字、字符串枢劝、元組等井联,列表等可變類型不可作為鍵
d = {'Michael': 95,'Bob': 75, 'Tracy': 85} #創(chuàng)建字典
d['Michael']
d['Adam'] = 67 #增加數(shù)據(jù)或者更新數(shù)據(jù)
del d['Michael'] #刪除字典元素
'Thomas' in d #判斷是否存在KEY d.has_key('Thomas')

字典的方法

d.clear() #清空
d.get('Thomas')
d.get('Thomas', -1) #如果不存在Thomas則返回-1
d.pop('Bob') #刪除一個(gè)Key,對(duì)應(yīng)的value也刪除
d.update({'Michael': 99})
d.keys() #返回鍵的列表 等同于list(d)
d.values() #返回值的列表
d.items() #生成一個(gè)字典的容器 [()]

dict函數(shù)

items=[('name','grb'),('age',42)]
d=dict(items) #或者通過(guò)關(guān)鍵字創(chuàng)建 d=dict(name='grb',age=42)
print d

set 集合

set和dict類似您旁,也是一組key的集合烙常,但不存儲(chǔ)value。由于key不能重復(fù)鹤盒,所以蚕脏,在set中侦副,沒(méi)有重復(fù)的key。沒(méi)有順序的概念驼鞭,所以不能切片和索引操作秦驯。
t = set("hello") #創(chuàng)建一個(gè)唯一字符的集合
t
s = set([1, 2, 3])
s
s.add(4) #添加一項(xiàng)
s.update([7,8,9,10]) #添加多項(xiàng)
s.remove(4) #刪除一項(xiàng)
成員操作關(guān)系 in 、not in
交集( & )挣棕、并集( | )译隘、差集( - )、對(duì)稱差集(^)
a = t | s
b = t & s
c = t - s
d = t ^ s #t和s中穴张,但不同是在t和s中
判斷集合是否相等與順序無(wú)關(guān) print set('abc') == set('bac')
列表的去重:
a = [1,2,3,3,4,4,5]
b=list(set(a))

frozenset()不可變集合

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末细燎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子皂甘,更是在濱河造成了極大的恐慌玻驻,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偿枕,死亡現(xiàn)場(chǎng)離奇詭異璧瞬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)渐夸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門嗤锉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人墓塌,你說(shuō)我怎么就攤上這事瘟忱。” “怎么了苫幢?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵访诱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我韩肝,道長(zhǎng)触菜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任哀峻,我火速辦了婚禮涡相,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剩蟀。我一直安慰自己催蝗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布育特。 她就那樣靜靜地躺著生逸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上槽袄,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音锋谐,去河邊找鬼遍尺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛涮拗,可吹牛的內(nèi)容都是我干的乾戏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼三热,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鼓择!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起就漾,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤呐能,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后抑堡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體摆出,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年首妖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了偎漫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡有缆,死狀恐怖象踊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棚壁,我是刑警寧澤杯矩,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站灌曙,受9級(jí)特大地震影響菊碟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜在刺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一逆害、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蚣驼,春花似錦魄幕、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春翼抠,著一層夾襖步出監(jiān)牢的瞬間咙轩,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工阴颖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留活喊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓量愧,卻偏偏與公主長(zhǎng)得像钾菊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子偎肃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 執(zhí)行過(guò)程 首先來(lái)說(shuō)下python的執(zhí)行過(guò)程: python解釋器讀取源代碼到內(nèi)存中 解釋器進(jìn)行詞法語(yǔ)法檢測(cè) 解釋器...
    胖寶寶王閱讀 310評(píng)論 0 0
  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫(xiě)完項(xiàng)目接著寫(xiě)寫(xiě)一名3年工作經(jīng)驗(yàn)的J...
    燕京博士閱讀 7,575評(píng)論 1 118
  • 最近在寫(xiě)個(gè)性化推薦的論文煞烫,經(jīng)常用到Python來(lái)處理數(shù)據(jù),被pandas和numpy中的數(shù)據(jù)選取和索引問(wèn)題繞的比較...
    shuhanrainbow閱讀 4,557評(píng)論 6 19
  • Python 是一種相當(dāng)高級(jí)的語(yǔ)言累颂,通過(guò) Python 解釋器把符合語(yǔ)法的程序代碼轉(zhuǎn)換成 CPU 能夠執(zhí)行的機(jī)器碼...
    Python程序媛閱讀 1,904評(píng)論 0 3
  • 第三本:《汪曾祺作品自選集》 少年男女之間懵懂的情愫滞详,是這世間最美好的感情之一。漢語(yǔ)現(xiàn)代文學(xué)作品里喘落,將這種美好呈現(xiàn)...
    蔡文兵閱讀 375評(píng)論 2 4