Python learning:More Types

Python learning:More Types

None

None 對象可以被用來表示值的缺失梗醇。它類似于其他編程語言中的null 捉捅。像一些空值冶匹,如0习劫,[]以及空字符串,當將這些值轉(zhuǎn)變成布爾變量(Boolean variable)的時候為False 嚼隘。

當我們在Python操作面輸入的時候诽里,None 會表現(xiàn)為空的字符串。

>>>None==None
True
>>>None
>>>print(None)
None
>>>

None 對象可以通過任何沒有明確的返回任何值的函數(shù)返回得到

示例一:

def some_fun():
    print("Hi!")
var=some_fun()
print(var)

Result:

>>>
Hi!
None
>>>

示例二:

foo=print()
if foo==None:
    print(1)
else:
    print(2)

Result:

1

Dictionaries(字典)

Dictionaries (字典)是用來將任意鍵映射到值的數(shù)據(jù)結(jié)構(gòu)飞蛹。列表可以被認為是帶有一定范圍內(nèi)的整數(shù)鍵的dictionaries 谤狡。Dictionaries 可以像列表一樣使用同樣的方式進行檢索,使用方括號(square brackets) 將鍵包含在里面:

示例一:

ages={"Dave":24,"Mary":42,"John":58}
print(ages["Dave"])
print(ages["Marry"])

Result:

>>>
24
42
>>>

如果試圖檢索不屬于dictionary 的鍵卧檐,將會返回KeyError

示例一:

primary={
    "red":[255,0,0],
    "green":[0,255,0],
    "blue":[0,0,255],
}
print(primary["red"])
print(primary["yellow"])

Result:

>>>
[255,0,]
KeyError:'yellow'
>>>

==注意==正如你所看到的墓懂,一個dictionary可以存儲任何類型的數(shù)據(jù)作為值,如果是一個空的dictionary可以定義為{}霉囚。

示例二:

test={}
print(test[0])

Result:

KeyError:0 #因為test是空的dictionary捕仔,沒有0這個鍵

只有不變的 對象才能用做字典的鍵。不能改變的對象指的是這些不能夠被改變的對象盈罐。到目前為止榜跌,你遇到的唯一可變的 對象就是listsdictionaries 。如果試圖將一個可變的對象作為字典的鍵盅粪,將會產(chǎn)生TypeError钓葫。

bad_dict={
    [1,3,4]:"one two four",
}

Result:

TypeError:unhashable type:'list'

和列表一樣,dictionary的鍵可以被指定給任何的值票顾。然而础浮,和列表不同的是,一個新的dictionary鍵可以被賦予一個新的值奠骄,這個值不是之前存在的霸旗。

示例一:

squares={1:1,2:4,3:"error",4:16}
squares[8]=64 #給不存在的鍵賦值
squares[3]=9 #給存在的鍵重新賦值
print(squares)

Result:

{1:1,2:4,3:9,4:16,8:64}

示例二:

primes={1:2,2:3,4:7,7:17}
print(primes[primes[4]])

Result:

17

為了判斷鍵是否在dictionary中,你可以使用in 或者not in 戚揭,就像你在列表中進行的那樣诱告。

示例一:

nums={
    1:"one",
    2:"two",
    3:"three",
}
print(i in nums)
print("three" in nums)# in 和not in都是用來判斷鍵的,不能判斷值
print(4 not in nums)

Result:

True
False
True

一個有用的dictionary方法就是get ,它可以完成索引能做的事情精居,但是如果發(fā)現(xiàn)鍵不在dictionary中锄禽,它就會返回另外一個指定的值(‘None',默認情況下)

示例一:

pairs={1:"apple",
      "orange":[2,3,4],
      True:False,
      None:"True",
      }
print(pairs.get("orange"))
print(pairs.get(7))
print(pairs.get(12345,"not in dictionary"))#鍵不在pairs中,但是指定了值靴姿,所以會返回指定的值

Result:

[2,3,4]
None
not in dictionary

示例二:

fib={1:1,2:1,3:2,4:3}
print(fib.get(4,0)+fib.get(7,5))

Result:

8
#因為fib.get(4,0)中鍵4是fib中的沃但,所以返回值3,而fib.get(7,5)中鍵7不是fib中的佛吓,所以返回指定的值宵晚。

Tuples (元組)

元組與列表也是非常類似的,我們希望元組是不可改變的维雇。同樣可以使用括號創(chuàng)建它們淤刃,而不是方括號。

words=("spam","eggs","sausages")

你可以使用它們的索引號來訪問元組中的值吱型,就像在列表中所進行的那樣:

print(words[0])#輸出第一個元素

如果試圖重新給元組賦值將會產(chǎn)生TypeError ,這也是和列表不同的地方逸贾。

words[1]="cheese"

Result:

TypeError:"tuple object dose not support item assignment"

==提示== 和列表以及字典一樣,元組可以相互嵌套

列表津滞,字典和元組創(chuàng)建及訪問方式的比較

#列表
list=["one","two"]
print(list[0])
#字典
dict={1:"one",2:"two",3:"three"}
print(dict[1])
print(dict.get(2))
#元組
tp=("one","two","three")
print(tp[1])

元組可以在沒有括號的情況下創(chuàng)建铝侵,可以通過僅僅將值用逗號分開來進行創(chuàng)建。

示例一:

my_tuple="one","two","three"
print(my_tuple[0])

如果要創(chuàng)建一個空的元組触徐,可以使用空括號:

tpl=()

==注意== 元組的訪問要快于列表咪鲜,但是其缺點在于元組不能夠被改變

List Slices(列表切片)

列表切片List slices 提供了更加高級的方法從列表中檢索值∽拆模基本的列表切片包括使用兩個逗號隔開的整數(shù)來檢索列表嗜诀。這將返回一個新的列表,這個列表包含所有在索引之間的舊列表之間的值孔祸。

squares=[0,1,4,9,16,25,36,49,64,81]
print(squares[2:6])
print(squares[3:8])
print(squares[0:1])

Result:

[4,9,16,25]
[9,16,25,64,81]
[0]

==Tips== 和Range 的參數(shù)一樣,切片提供的第一個所有被包含在結(jié)果中发皿,但是第二個并沒有被包含在結(jié)果中崔慧。

如果切片中的第一個數(shù)字被省略了,它代表的就是列表的開頭穴墅。如果第二個數(shù)字被刪除了惶室,它代表的就是列表的結(jié)尾。

示例一:

squares=[0,1,4,9,16,25,36,49,64,81]
print(squares[:7])
print(squares[7:])

Result:

[0,1,4,9,16,25,36]
[49,64,81]

==Tips== 對元組也可以使用切片

列表切片可以有第三個參數(shù)玄货,代表的是步數(shù)皇钞,在切片中只包含備用值:

squares=[0,1,4,9,16,25,36,49,64,81]
print(squares[::2])
print(squares[2:8:3])

Result:

[0,4,16,36,64]
[4,25]

==Tips== 第三個參數(shù)的通俗意思就是間隔距離,隔幾個數(shù)取一個值

負值也可以在列表切片中使用(以及正常的列表索引)松捉。當切片中的第一個和第二個參數(shù)被使用負值的時候(或者一個正常的索引),它們將會從列表的末尾開始數(shù)起夹界。

squares=[0,1,4,9,16,25,36,49,64,81]
print(squares[1:-1])

Result:

[1,4,16,25,36,49,64]

==Tips== 如果有負值被使用在步驟中,切片將被向后進行切割隘世。使用[::-1]作為一個切片是一個很常見也很慣用的將列表進行倒置的方式可柿,但是如果前面的兩個參數(shù)存在的話鸠踪,切片的返回值為[],也就是一個空列表,如果前面兩個參數(shù)第一個參數(shù)比第二個參數(shù)大,第三個參數(shù)為負值的話复斥,就可以創(chuàng)建一個新的列表营密。

squares=[0,1,4,9,16,25,64,81]
print(squares[::-1])
print(squares[1:8:-1])
print(squares[::-2])
print(squares[7:1:-2])

Result:

[81,64,49,36,25,16,9,4,1,0]
[]
[81,25,9,1]
[81,25,9]

List Comprehensions(列表解析)

列表解析是一種快速創(chuàng)建列表非常有用的方式,其中列表的內(nèi)容要遵循簡單的規(guī)則目锭。例如评汰,我們可以像下面一樣進行:

#一個列表解析
cubes=[i**3 for i in range(5)]
print(cubes)

Result:

[0,1,8,27,64]

==Tips== 列表解析的靈感來自于數(shù)學中的set-builder計數(shù)法,python 計算中痢虹,i2* 表示的是積, **i**2 ** 表示的是平方被去。

列表解析還可以包含if 語句來強制列表中的值的條件。

示例一:

evens=[i**2 for i in range(10) if i**2 % 2 ==0 ]
#下面的代碼和上面的代碼將會得到同樣的結(jié)果
evens=[i**2 for i in range(10) if i%2==0]
print(evens)

Result:

[0,4,16,36,64]

如果試圖創(chuàng)建一個范圍非常極端的列表世分,將會產(chǎn)生MemoryError 编振,下面的代碼展示的就是列表解析超出了內(nèi)存的情況:

even=[2*i for i in range(10**100)]
print(even)

Result:

Memory limit exceeded

==Tips== 這個問題可以由生成器來解決,我們將在下一個模塊講解生成器

String Formatting(字符串格式化)

到目前為止臭埋,為了字符串和非字符串結(jié)合起來踪央,你就得把非字符串轉(zhuǎn)變成字符串然后把它們加在一起。字符串格式化提供了一個更加有效額方式來將非字符串嵌合到字符串中瓢阴。字符串格式化使用一個字符串的format 方法來替換字符串中的一些參數(shù)畅蹂。

示例一:

# 字符串格式化
nums=[4,5,6]
msg="Numbers:{0}{1}{2}".format(nums[0],nums[1],nums[2])
print(msg)

Result:

Numbers:456

==Tips==

format函數(shù)的每個參數(shù)都放在字符串中相應(yīng)的位置,該位置由大括號{}確定荣恐。

示例二:

print("{0}{1}{0}.format("abra","cad"))

Result

abracadabra

字符串格式化也可以使用命名參數(shù)來完成液斜。

示例一:

a="{x},{y}".format(x=5,y=12)
print(a)

Result:

5,12

Python 包含有大量有用額內(nèi)置函數(shù)和方法來完成相同的任務(wù)。

join - 將一個字符串與另外一個作為分隔符的字符串進行連接

replace -將字符串中的一個子字符串替換成另外一個子字符串

startwithendswith - 分別確定一個子字符串是否在一個字符串的開頭或者是否在字符串的末尾叠穆。

為了改變字符串的狀態(tài)少漆,你可以使用lowerupper

split 方法與join 是相反的硼被,將帶有特定分隔符的字符串轉(zhuǎn)變?yōu)橐粋€列表示损。

示例一:

print(",".join(["spam","eggs","ham"]))#(1)
print("Hello ME".replace("ME","world"))#(2)
print("This is a sentence".startswith("This"))#(3)
print("This is a sentence".endswith("sentence"))#(4)
print("This is a sentence".upper())#(5)
print("AN ALL CAPS SENTENCE".lower())#(6)
print("spam,eggs,ham".split(","))#(7)

Result:

spam,eggs,ham #(1)
Hello world #(2)
True #(3)
True #(4)
THIS IS A SENTENCE #(5)
an all caps sentence #(6)
['spam', 'eggs', 'ham'] #(7)

數(shù)值函數(shù)

為了知道一些數(shù)字或者列表中最大的或者最小的值,你可以使用max 或者min

為了找到一個數(shù)字與零之間的距離(也就是它的絕對值)嚷硫,可以使用 abs

為了把一個小數(shù)四舍五入到一定的位置检访,可以使用round

為了得到整個列表的總和,可以使用sum

示例一:

print(min(1,2,3,4,0,2,1))
print(max(1,4,9,2,5,6,8))
print(abs(-99))
print(abs(42))
print(sum([1,2,3,4,5]))

Result:

0
9
99
42
15

示例二:

a=min([sum([11,22]),max(abs(-30),2)])
print(a)

Result:

a

列表函數(shù)

allany 將一個列表作為聲明仔掸,通常被用在條件語句中洼哎,如果allany 中的分別的聲明等于True 的話碾褂,就返回True ,反之則返回False .

函數(shù)enumerate 可以被用來歷遍這些值法褥,并創(chuàng)建一個實時列表艇挨。

示例一:

nums=[55,44,33,22,11]
if all([i > 5 for i in nums]):
    print("All larger than 5")

if any([i % 2 ==0 for i in nums]):
    print("At least one is even")
    
for v in enumerate(nums):
    print(V)

Result:

All larger than 5
At least one is even
(0,55)
(1,44)
(2,33)
(3,22)
(4,11)

示例二:

nums=[-1,2,3,4,-5]
if all([abs(i)<3 for i in nums]):
    print(1)
else:
    print(2)

Result:

2

Text Analyzer(文本分析器)

這是一個示范程序,展示了分析樣本文件來找到文本中每個類型的字符所占的百分比是多少的過程。這部分展示了一個文件如何被打開以及被讀取双泪。

filename=input("Enter a filaname:")
with open(filename) as f:
    text=f.read()
print(text)

這部分的程序展示的計算一個字符在一個字符串中出現(xiàn)了多少次的計算函數(shù)持搜。這個函數(shù)采用了文件的內(nèi)容和一個字符作為聲明,返回的是該字符在文件中出現(xiàn)的次數(shù)焙矛。

def count_char(text,char):
    count=0
    for c in text:
        if c==char:
            count+=1
    return count
filename=input("Enter a filename:")
with.open(filename) as f:
    text=f.read()
print(count_char(text,"r"))

==Tips== return 的位置很重要葫盼,它和for 循環(huán)是同一等級的。

下面的這部分程序是找出文本中每個字符所占的百分比村斟。

示例一:

for char in "abcdhowe hfuwqfohqaou":
    perc=100*count_char(text,char)/len(text)
    print("{0}-{1}%".foramt(char,round(perc,2)))

下面我們把前面的代碼全部放到一起并運行:

def count_char(text,char):
    count=0
    for c in text:
        if c==char:
            count+=1
    return count

filename=input("Enter a filename:")
with open(filename) as f:
    text=f.read()
   
for char in "dejwo hfowhfowhefoihoKBVKFB":
    perc=100*count_char(text,char)/len(text)
    print("{0}-{1}%".format(char,round(perc,2)))
        

示例二:

def count_char(text,char):
    count=0
    for c in text:
        if c==char:
            count+=1
    return count
text="dhofifbksahfugvlsdhgbvneranak" #隨便輸?shù)?for char in text:
    perc=100*count_char(text,char)/len(text)
    print("{0}-{1}-{2}%".format(char,count_char(text,char),round(perc,2)))
print(len(text)) #round函數(shù)可以減少小數(shù)位數(shù)的輸出
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贫导,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蟆盹,更是在濱河造成了極大的恐慌孩灯,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逾滥,死亡現(xiàn)場離奇詭異峰档,居然都是意外死亡,警方通過查閱死者的電腦和手機寨昙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門讥巡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人舔哪,你說我怎么就攤上這事欢顷。” “怎么了捉蚤?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵抬驴,是天一觀的道長。 經(jīng)常有香客問我缆巧,道長布持,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任陕悬,我火速辦了婚禮题暖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘墩莫。我一直安慰自己,他們只是感情好逞敷,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著推捐,像睡著了一般裂问。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天堪簿,我揣著相機與錄音痊乾,去河邊找鬼。 笑死椭更,一個胖子當著我的面吹牛哪审,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播虑瀑,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼湿滓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了舌狗?” 一聲冷哼從身側(cè)響起叽奥,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎痛侍,沒想到半個月后朝氓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡主届,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年赵哲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岂膳。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡誓竿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谈截,到底是詐尸還是另有隱情筷屡,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布簸喂,位于F島的核電站毙死,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏喻鳄。R本人自食惡果不足惜扼倘,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望除呵。 院中可真熱鬧再菊,春花似錦、人聲如沸颜曾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泛豪。三九已至稠诲,卻和暖如春侦鹏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背臀叙。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工略水, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人劝萤。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓渊涝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親稳其。 傳聞我的和親對象是個殘疾皇子驶赏,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

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

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔,今天18年5月份再次想寫文章既鞠,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 2,746評論 2 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,096評論 1 32
  • 1.基本使用 1.1 數(shù)據(jù)類型 常用數(shù)據(jù)類型 Common Data Types 其他類型 Others 1.2 ...
    suwi閱讀 1,346評論 0 3
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,233評論 0 4
  • 1. 簡介 1.1 什么是 MyBatis 煤傍? MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,510評論 0 4