1. 程式人生 > >python day03筆記&練習

python day03筆記&練習

這一波我們學習的是python中比較關鍵的兩個資料結構 列表和字典

列表俗稱打了激素的陣列 因為它不僅有陣列的全部功能 而且每個索引的數值型別可以不同

不像陣列 只能存同類型的資料 列表可以存各種各樣的資料型別 

並且相對於不可變得元組 列表是可變的有序資料結構

列表的索引 完全和字串是相同的 正向 逆向 切片 都是相同的操作

重複和連線 也是有和字串相同的方法

那麼下來就是增刪查改

首先 增

增加有兩種常用的方法

append方法和insert方法

append方法是將括號中的引數 追加到列表的最後 

insert方法有兩個引數 index和value 將value插入到對應的index位置

還有一個方法叫extend拉伸 這個可以把括號中的多個引數 追加到列表後面

然後 改

改的話很簡單 就是列表對應索引的再賦值

查的話 有count方法 統計一個引數在列表中出現的次數

index方法 查詢引數在列表中對應的索引值

刪的話 指定value刪的方法是remove

直接刪的話 del+ 列表[索引]

也可以使用切片 來實現各種型別的刪除

整個刪除列表的話就是del + 列表

然後排序的話 是使用sort方法 但是不建議在各種型別的值都有的列表中使用 因為排序在不同數值型別之間是沒有意義的

逆轉還是使用切片的方式[::-1]

2. 字典 

字典是比較特殊的一個數據結構 主要就是建立一個key和value的對映關係 就像c的連結串列一樣 每個value對應一個它後繼的指標 然後這一對資料被存在一個地址空間裡

字典也是一樣 把一個鍵 值 的對 一對一對的儲存起來

字典的話還要說說建立

可以使用key:value直接建立 如下

d = {"key1":"value1", "key2":"value2"}

也可以通過工廠函式建立

userinfo = dict(user1="123", user2="456", user3 ="789") 

還可以通過fromkeys方法建立

print {}.fromkeys("hello")  沒有指定value值時 預設為none

print {}.fromkeys(["user1", "user2", "user3"], "123")

這樣的話 預設值就是123

同時 字典具有以下的特性:

字典不能索引和切片,因為字典是無序的資料型別;

字典不支援重複和連線;

字典支援成員操作符: 判斷字典的key值是否在字典中存在; in, not in

那麼下來說字典的增刪查改

可以通過[key]=value直接新增

services['http'] = [80, 8080]

但是更推薦使用update方法新增

但是update有個特點就是如果字典中已存在要新增的key值的話 那麼原先的對 就會被新加的對覆蓋

而setdefault方法 的話 不會覆蓋原先的鍵值對 但是如果key存在的話 是新增不進去的

所以從這裡 可以看出來 key對於字典來說 相當於資料庫表中的primary key 主鍵一樣 是唯一標識的 不能重複

字典名[key]=value 

d.update({'a':2, 'b':3}) 

d.update(a=2, b=3)

這三種方法都是可以的 感覺還是和增是同樣的操作

檢視 key 值的話

services.keys() 

services.viewkeys()  

services.iterkeys()這三個方法是可以的

檢視value值使用 values方法

檢視鍵值對 的話 用items方法

檢視key是否存在 使用has_key方法

d.pop(key)     刪除指定 key 的字典元素

d.popitem()    隨機刪除字典的 key-value 元素

del d[key]     刪除指定 key 的字典元素

d.clear()      清空字典元素

要迴圈遍歷字典的話 使用一個二重迴圈

for i,j in services.items():        

print i,j

而且 字典還有一個很有意思的用法 

用來實現switch——case語句

因為python是不支援switch——case的

但是字典剛好是key value的鍵值對 並且值可以是一個表示式 那麼剛好可以利用這個結構來構建switch——case

num1 = input() 

ope = raw_input() 

num2 = input()
 
 
d = {    

"+" : num1+num2,    

"-" : num1-num2,   

"*" : num1*num2,    

"/" : num1/num2, 

}
 if not ope in d:

    print "error operator" 

else:    

    print d[ope]

那麼筆記整理到此結束  下面是練習

輸入一串字元 判斷其中最後一個單詞的長度 單詞以空格隔開

輸入一串字元和一個字母 以空格隔開 判斷字母在前面的字元中出現過多少次

將轉義過後的密碼翻譯成正確的密碼 密碼對應規則是 大寫字母小寫並後移一位  小寫字母對應成手機九宮格鍵盤的數字 數字不變

騰訊程式設計   

輸入一個1~2000的數字 判斷共有多少對素數相加的和等於這個數

這個不好測試手算太麻煩 我大概算了一下前20 是滿足的 後面數字太大不好算了 應該是對的吧