1. 程式人生 > >python學習之路(基礎篇)——列表,字典,集合

python學習之路(基礎篇)——列表,字典,集合

cef mes 所有 聽說 基本 變量 .so tdi 作用

一、列表,元組操作

定義列表

names = [Alex,"Tenglan",Eric]

查看

>>> names[0]
Alex
>>> names[2]
Eric
>>> names[-1]
Eric
>>> names[-2] #還可以倒著取
Tenglan

切片

技術分享圖片
>>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
>>> names[1:4]  #取下標1至下標4之間的數字,包括1,不包括4
[Tenglan, Eric, Rain] >>> names[1:-1] #取下標1至-1的值,不包括-1 [Tenglan, Eric, Rain, Tom] >>> names[0:3] [Alex, Tenglan, Eric] >>> names[:3] #如果是從頭開始取,0可以忽略,跟上句效果一樣 [Alex, Tenglan, Eric] >>> names[3:] #如果想取最後一個,必須不能寫-1,只能這麽寫 [Rain, Tom, Amy
] >>> names[3:-1] #這樣-1就不會被包含了 [Rain, Tom] >>> names[0::2] #後面的2是代表,每隔一個元素,就取一個 [Alex, Eric, Tom] >>> names[::2] #和上句效果一樣 [Alex, Eric, Tom]
View Code

追加

技術分享圖片
>>> names
[Alex, Tenglan, Eric, Rain, Tom, Amy]
>>> names.append("我是新來的
") >>> names [Alex, Tenglan, Eric, Rain, Tom, Amy, 我是新來的]
View Code

插入

技術分享圖片
>>> names
[Alex, Tenglan, Eric, Rain, Tom, Amy, 我是新來的]
>>> names.insert(2,"強行從Eric前面插入")
>>> names
[Alex, Tenglan, 強行從Eric前面插入, Eric, Rain, Tom, Amy, 我是新來的]

>>> names.insert(5,"從eric後面插入試試新姿勢")
>>> names
[Alex, Tenglan, 強行從Eric前面插入, Eric, Rain, 從eric後面插入試試新姿勢, Tom, Amy, 我是新來的]
View Code

修改

技術分享圖片
>>> names
[Alex, Tenglan, 強行從Eric前面插入, Eric, Rain, 從eric後面插入試試新姿勢, Tom, Amy, 我是新來的]
>>> names[2] = "該換人了"
>>> names
[Alex, Tenglan, 該換人了, Eric, Rain, 從eric後面插入試試新姿勢, Tom, Amy, 我是新來的]
View Code

刪除

技術分享圖片
>>> del names[2] 
>>> names
[Alex, Tenglan, Eric, Rain, 從eric後面插入試試新姿勢, Tom, Amy, 我是新來的]
>>> del names[4]
>>> names
[Alex, Tenglan, Eric, Rain, Tom, Amy, 我是新來的]
>>> 
>>> names.remove("Eric") #刪除指定元素
>>> names
[Alex, Tenglan, Rain, Tom, Amy, 我是新來的]
>>> names.pop() #刪除列表最後一個值 
我是新來的
>>> names
[Alex, Tenglan, Rain, Tom, Amy]
View Code

擴展

技術分享圖片
>>> names
[Alex, Tenglan, Rain, Tom, Amy]
>>> b = [1,2,3]
>>> names.extend(b)
>>> names
[Alex, Tenglan, Rain, Tom, Amy, 1, 2, 3]
View Code

拷貝

技術分享圖片
>>> names
[Alex, Tenglan, Rain, Tom, Amy, 1, 2, 3]

>>> name_copy = names.copy()
>>> name_copy
[Alex, Tenglan, Rain, Tom, Amy, 1, 2, 3]
View Code

拷貝分為淺copy和深copy 需要import調用

如列表包含列表情況

淺copy拷貝淺層深層的列表是拷貝地址name2=copy.copy(names)

深 copy則是完整拷貝 name2=copy.deepcopy(names)

淺copy可以用來創建聯合賬戶

統計

技術分享圖片
>>> names
[Alex, Tenglan, Amy, Tom, Amy, 1, 2, 3]
>>> names.count("Amy")
2
View Code

排序&翻轉

技術分享圖片
>>> names
[Alex, Tenglan, Amy, Tom, Amy, 1, 2, 3]
>>> names.sort() #排序
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < str()   #3.0裏不同數據類型不能放在一起排序了,擦
>>> names[-3] = 1
>>> names[-2] = 2
>>> names[-1] = 3
>>> names
[Alex, Amy, Amy, Tenglan, Tom, 1, 2, 3]
>>> names.sort()
>>> names
[1, 2, 3, Alex, Amy, Amy, Tenglan, Tom]

>>> names.reverse() #反轉
>>> names
[Tom, Tenglan, Amy, Amy, Alex, 3, 2, 1]
View Code

獲取下標

技術分享圖片
>>> names
[Tom, Tenglan, Amy, Amy, Alex, 3, 2, 1]
>>> names.index("Amy")
2 #只返回找到的第一個下標
View Code

元組

元組其實跟列表差不多,也是存一組數,只不是它一旦創建,便不能再修改,所以又叫只讀列表

names = ("alex","jack","eric")

它只有2個方法,一個是count,一個是index,完畢。

二、字符串操作

三、字典操作

info = {
    ‘stu1101‘: "TengLan Wu",
    ‘stu1102‘: "LongZe Luola",
    ‘stu1103‘: "XiaoZe Maliya",
}

字典的特性:

  • dict是無序的
  • key必須是唯一的,so 天生去重

增加

技術分享圖片
>>> info["stu1104"] = "蒼井空"
>>> info
{stu1102: LongZe Luola, stu1104: 蒼井空, stu1103: XiaoZe Maliya, stu1101: TengLan Wu}
View Code

修改

技術分享圖片
>>> info[stu1101] = "武藤蘭"
>>> info
{stu1102: LongZe Luola, stu1103: XiaoZe Maliya, stu1101: 武藤蘭}
View Code

刪除

技術分享圖片
>>> info
{stu1102: LongZe Luola, stu1103: XiaoZe Maliya, stu1101: 武藤蘭}
>>> info.pop("stu1101") #標準刪除姿勢
武藤蘭
>>> info
{stu1102: LongZe Luola, stu1103: XiaoZe Maliya}
>>> del info[stu1103] #換個姿勢刪除
>>> info
{stu1102: LongZe Luola}
>>> 
>>> 
>>> 
>>> info = {stu1102: LongZe Luola, stu1103: XiaoZe Maliya}
>>> info
{stu1102: LongZe Luola, stu1103: XiaoZe Maliya} #隨機刪除
>>> info.popitem()
(stu1102, LongZe Luola)
>>> info
{stu1103: XiaoZe Maliya}
View Code

查找

技術分享圖片
>>> info = {stu1102: LongZe Luola, stu1103: XiaoZe Maliya}
>>> 
>>> "stu1102" in info #標準用法
True
>>> info.get("stu1102")  #獲取
LongZe Luola
>>> info["stu1102"] #同上,但是看下面
LongZe Luola
>>> info["stu1105"]  #如果一個key不存在,就報錯,get不會,不存在只返回None
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: stu1105
View Code

多級字典嵌套與操作

技術分享圖片
av_catalog = {
    "歐美":{
        "www.youporn.com": ["很多免費的,世界最大的","質量一般"],
        "www.pornhub.com": ["很多免費的,也很大","質量比yourporn高點"],
        "letmedothistoyou.com": ["多是自拍,高質量圖片很多","資源不多,更新慢"],
        "x-art.com":["質量很高,真的很高","全部收費,屌比請繞過"]
    },
    "日韓":{
        "tokyo-hot":["質量怎樣不清楚,個人已經不喜歡日韓範了","聽說是收費的"]
    },
    "大陸":{
        "1024":["全部免費,真好,好人一生平安","服務器在國外,慢"]
    }
}

av_catalog["大陸"]["1024"][1] += ",可以用爬蟲爬下來"
print(av_catalog["大陸"]["1024"])
#ouput 
[全部免費,真好,好人一生平安, 服務器在國外,慢,可以用爬蟲爬下來]
View Code

其他操作

技術分享圖片
#values
>>> info.values()
dict_values([LongZe Luola, XiaoZe Maliya])

#keys
>>> info.keys()
dict_keys([stu1102, stu1103])


#setdefault
>>> info.setdefault("stu1106","Alex")
Alex
>>> info
{stu1102: LongZe Luola, stu1103: XiaoZe Maliya, stu1106: Alex}
>>> info.setdefault("stu1102","龍澤蘿拉")
LongZe Luola
>>> info
{stu1102: LongZe Luola, stu1103: XiaoZe Maliya, stu1106: Alex}


#update 
>>> info
{stu1102: LongZe Luola, stu1103: XiaoZe Maliya, stu1106: Alex}
>>> b = {1:2,3:4, "stu1102":"龍澤蘿拉"}
>>> info.update(b)
>>> info
{stu1102: 龍澤蘿拉, 1: 2, 3: 4, stu1103: XiaoZe Maliya, stu1106: Alex}

#items
info.items()
dict_items([(stu1102, 龍澤蘿拉), (1, 2), (3, 4), (stu1103, XiaoZe Maliya), (stu1106, Alex)])


#通過一個列表生成默認dict,有個沒辦法解釋的坑,少用吧這個
>>> dict.fromkeys([1,2,3],testd)
{1: testd, 2: testd, 3: testd}
View Code

字典循環

#方法1
for key in info:
    print(key,info[key])

#方法2
for k,v in info.items(): #會先把dict轉成list,數據裏大時莫用
    print(k,v)

四、集合操作

集合是一個無序的,不重復的數據組合,它的主要作用如下:

  • 去重,把一個列表變成集合,就自動去重了
  • 關系測試,測試兩組數據之前的交集、差集、並集等關系

常用操作

技術分享圖片
s = set([3,5,9,10])      #創建一個數值集合  
  
t = set("Hello")         #創建一個唯一字符的集合  


a = t | s          # t 和 s的並集  
  
b = t & s          # t 和 s的交集  
  
c = t – s          # 求差集(項在t中,但不在s中)  
  
d = t ^ s          # 對稱差集(項在t或s中,但不會同時出現在二者中)  
  
   
  
基本操作:  
  
t.add(x)            # 添加一項  
  
s.update([10,37,42])  # 在s中添加多項  
  
   
  
使用remove()可以刪除一項:  
  
t.remove(H)  
  
  
len(s)  
set 的長度  
  
x in s  
測試 x 是否是 s 的成員  
  
x not in s  
測試 x 是否不是 s 的成員  
  
s.issubset(t)  
s <= t  
測試是否 s 中的每一個元素都在 t 中  
  
s.issuperset(t)  
s >= t  
測試是否 t 中的每一個元素都在 s 中  
  
s.union(t)  
s | t  
返回一個新的 set 包含 s 和 t 中的每一個元素  
  
s.intersection(t)  
s & t  
返回一個新的 set 包含 s 和 t 中的公共元素  
  
s.difference(t)  
s - t  
返回一個新的 set 包含 s 中有但是 t 中沒有的元素  
  
s.symmetric_difference(t)  
s ^ t  
返回一個新的 set 包含 s 和 t 中不重復的元素  
  
s.copy()  
返回 set “s”的一個淺復制
View Code

五、文件操作

對文件操作流程

  1. 打開文件,得到文件句柄並賦值給一個變量
  2. 通過句柄對文件進行操作
  3. 關閉文件

基本操作

f = open(lyrics) #打開文件
first_line = f.readline()
print(first line:,first_line) #讀一行
print(我是分隔線.center(50,-))
data = f.read()# 讀取剩下的所有內容,文件大時不要用
print(data) #打印文件
 
f.close() #關閉文件

這種操作只能讀小文件

讀文件前五行

for i in range(5)
    print(f.readline())

讀第五到第十

加if判斷

打開文件的模式有:

  • r,只讀模式(默認)。
  • w,只寫模式。【不可讀;不存在則創建;存在則刪除內容;】
  • a,追加模式。【可讀; 不存在則創建;存在則只追加內容;】

"+" 表示可以同時讀寫某個文件

  • r+,可讀寫文件。【可讀;可寫;可追加】
  • w+,寫讀
  • a+,同a

"U"表示在讀取時,可以將 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)

  • rU
  • r+U

"b"表示處理二進制文件(如:FTP發送上傳ISO鏡像文件,linux可忽略,windows處理二進制文件時需標註)

  • rb
  • wb
  • ab

六、字符編碼與轉碼

python學習之路(基礎篇)——列表,字典,集合