1. 程式人生 > >python---基礎之模塊,列表,元組,字典

python---基礎之模塊,列表,元組,字典

python3 ack div 第一個 ice lis value bsp 索引

1、 模塊

寫模塊的時候盡量不要和系統自帶的模塊的名字相同

調用模塊的時候,會先在當前目錄下查找是否有這個模塊,然後再會如python的環境變量中查找

a.模塊1:sys

代碼如下:

1 import sys
2 print(sys.path)  

該代碼的作用就是打印出python環境變量如下所示:

D:\\python培訓\\s14\\day2

D:\\python培訓\\s14

D:\\python35\\python35.zip

D:\\python35\\DLLs

D:\\python35\\lib

D:\\python35

D:\\python35\\lib\\site-packages

第三方庫會放在這裏

print(sys.argv) #打印當前文件的相對路徑,但是在pycharm中打印的是絕對路徑 打印結果如下所示:

[‘D:/python培訓/s14/day2/sys_mod.py‘]

b. 模塊2:os

代碼如下:

1 import os
2 cmd = os.system("dir") #執行命令,不保存結果
3 cmd_res = os.popen("dir").read() #執行命令,保存結果
4 print("--->",cmd_res)
5 os.mkdir("new_dir") #創建目錄

2、數據類型:

數字:整型(int) float(浮點型),無論多大在3.0python中都是int 即3.0沒有長整型這個概念

布爾值:真或假 1或0

字符串

關於字符串的操作例子:

技術分享
name="zhaofan"
print(name.capitalize())   #將字符串首字母大寫
print(name.count("a"))     #查找字符串中a的個數
print(name.center(50,"-")) #顯示結果如下:
---------------------zhaofan----------------------
print(name.endswith("an"))  #判斷字符串的結尾是否為an
print("My name is zhaofan".find("name")) #返回字符串的索引
print(name.isalnum())  #如果字符串中包括文字和數字的都返回true
print("zhaofan".isalpha()) #如果字符串中都為字母則返回true
print("123123".isdigit())  #判斷字符串中是否都為數字
print("ZZZZ".islower())   #判斷字符串是否為小寫
name.strip() 去掉前和後面的空格
name.lstrip()去掉左邊的空格
name.rstrip()去掉右邊的空格
name.replace() 替換
name.rfind(“字符”) 查找字符串中最右邊的那個字符的下標
name.split()  分割字符串,默認是以空格分割
技術分享

python3中的不等於只能用!= 取消了2.0中的<>

3、列表

列表的特點:列表是有序的,列表可以有重復的值

list[數字] 就可以取出列表中相對應的值

關於列表切片:

list[1:2]從第二個位置開始取,包括其實位置,但是不包含結尾,即取出列表的第二個值list[1],list[1:3]就可以取出第2個和第3個值

list[-1] 取出列表的最後一個值

list[-2]取出列表倒數兩個值

list[:3]取出列表的前兩個值

列表的增加

list.append(“元素名”) 給列表的最後追加一個元素

列表的插入

list.insert(1,“元素名”)在列表的第一個第2個位置插入一個元素

列表的修改

name[2]=”新的元素名” 將列表的第3個元素進行更改

列表的刪除

name.remove(“元素名”)刪除列表中對應的元素

del names[1] 刪除列表中相應的元素

name.pop()如果沒有輸出下標則刪除列表中的最後一個值,如果刪除數字下標就可以刪除相對應的元素

查找列表中某個元素的位置,即下標

name.index(“元素名”)

name.clear() 情況列表

name.count(“元素名”) 找出列表的某個元素的個數

name.reverse() 將列表中元素進行反轉

name.sort()將列表元素進行排序

name.extend(names2) 將name2並入到name列表中

del name2 就可以刪除name2列表

4、關於列表的深淺拷貝

首先淺拷貝

name.copy() 就是淺拷貝

下面是關於淺拷貝的代碼例子:

技術分享
 1 names = ["ZhaFan","Dean",[1,2,3,4],"Dean","Dan","jack","Yes","A","a"]
 2 names2 = names.copy()
 3 print(names)
 4 print(names2)
 5 names2[1]="zhaofan"
 6 print(names)
 7 print(names2)
 8 
 9 names[2][0]=100
10 print(names)
11 print(names2)
技術分享

上述代碼的的運行結果如下:

D:\python35\python.exe D:/python培訓/s14/day2/copy_qian.py

[‘ZhaFan‘, ‘Dean‘, [1, 2, 3, 4], ‘Dean‘, ‘Dan‘, ‘jack‘, ‘Yes‘, ‘A‘, ‘a‘]

[‘ZhaFan‘, ‘Dean‘, [1, 2, 3, 4], ‘Dean‘, ‘Dan‘, ‘jack‘, ‘Yes‘, ‘A‘, ‘a‘]

[‘ZhaFan‘, ‘Dean‘, [1, 2, 3, 4], ‘Dean‘, ‘Dan‘, ‘jack‘, ‘Yes‘, ‘A‘, ‘a‘]

[‘ZhaFan‘, ‘zhaofan‘, [1, 2, 3, 4], ‘Dean‘, ‘Dan‘, ‘jack‘, ‘Yes‘, ‘A‘, ‘a‘]

[‘ZhaFan‘, ‘Dean‘, [100, 2, 3, 4], ‘Dean‘, ‘Dan‘, ‘jack‘, ‘Yes‘, ‘A‘, ‘a‘]

[‘ZhaFan‘, ‘zhaofan‘, [100, 2, 3, 4], ‘Dean‘, ‘Dan‘, ‘jack‘, ‘Yes‘, ‘A‘, ‘a‘]

總結:從上述結果可以看出,names.copy()復制出一個與names列表一樣的列表當修改列表中的內容時,

如果列表中嵌套有列表,那麽如果修改是列表的第一層,那麽只會更改修改的那個列表,如果修改的是嵌套裏的列表的內容,則兩個列表的內容的都會更改

如下圖:

技術分享

下面是關於深拷貝

深拷貝需要借助模塊copy

深拷貝的時候,就是完全都開辟出另外一個內存空間,及修改其中一個列表中任意一個值,另外一個列表都不會發生變化:

代碼例子如下:

技術分享
1 import copy
2 names = ["ZhaFan","Dean",[1,2,3,4],"Dean","Dan","jack","Yes","A","a"]
3 names2 = copy.deepcopy(names)
4 print(names)
5 print(names2)
6 names[2][1]=10000
7 print(names)
8 print(names2)
技術分享

運行結果如下:

D:\python35\python.exe D:/python培訓/s14/day2/copy_deep.py

[‘ZhaFan‘, ‘Dean‘, [1, 2, 3, 4], ‘Dean‘, ‘Dan‘, ‘jack‘, ‘Yes‘, ‘A‘, ‘a‘]

[‘ZhaFan‘, ‘Dean‘, [1, 2, 3, 4], ‘Dean‘, ‘Dan‘, ‘jack‘, ‘Yes‘, ‘A‘, ‘a‘]

[‘ZhaFan‘, ‘Dean‘, [1, 10000, 3, 4], ‘Dean‘, ‘Dan‘, ‘jack‘, ‘Yes‘, ‘A‘, ‘a‘]

[‘ZhaFan‘, ‘Dean‘, [1, 2, 3, 4], ‘Dean‘, ‘Dan‘, ‘jack‘, ‘Yes‘, ‘A‘, ‘a‘]

從代碼可以看出,修改一起種一個列表中的內容,另外一個並不會發生變化

列表中打印每個元素

for I in names:

print I

5、元組tuple

元組就是不可變的列表,即tuple一旦被初始化就不能修改,所以tuple不能用類似於list列表中的append(),insert()等這些修改的方法

關於元組的代碼例子如下:

1 tt_tuple = ("zhaofan","dean","jack")
2 print(tt_tuple.count("dean"))
3 print(tt_tuple.index("jack"))
4 print(tt_tuple[-1])

運行結果如下:

D:\python35\python.exe D:/python培訓/s14/day2/tuple_ex.py

1

2

jack

7、關於用list列表編寫一個簡單的購物車的例子:

程序要求:

a. 啟動程序後,讓用戶輸入工資,然後打印商品列表

b. 允許用戶根據商品編號購買商品

c. 用戶選擇商品後,檢測余額是否夠,夠就直接扣款,不夠就提示用戶

d. 可以隨時退出,退出時,打印已經購買的商品和余額

技術分享
 1 goods_list=[["Iphone",5288],["Bike",1200],["Coffee",20],["Ipad",1800]]
 2 shopping_list=[]
 3 user_salary = input("請輸入你的工資是:")
 4 if user_salary.isdigit() is True:
 5     user_salary = int(user_salary)
 6     while True:
 7         for key,iterm in enumerate(goods_list):
 8             print(key,iterm[0],iterm[1])
 9         user_choice = input("你想要買什麽(輸入商品的序號,q表示退出系統):")
10         if user_choice.isdigit() is True:
11             user_choice=int(user_choice)
12             if user_choice > len(goods_list):
13                 print("\033[31;1m你輸入的商品編號不存在\033[0m")
14                 continue
15             if goods_list[user_choice][1] < user_salary and user_choice > 0:
16                 shopping_list.append(goods_list[user_choice])
17                 user_salary -= goods_list[user_choice][1]
18                 print("\033[31;1m%s\033[0m 已經被添加到購物車,你的錢還剩余\033[31;1m%s\033[0m" %(goods_list[user_choice][0],user_salary))
19                 continue
20             else:
21                 print("\033[31;1m你沒有足夠的錢了,你只剩下%s人民幣了\033[0m" %user_salary)
22 
23         if user_choice == "q":
24             print("你的購物車".center(50,"-"))
25             for key,iterm in enumerate(shopping_list):
26                 print(key,iterm[0],iterm[1])
27             print("你還剩余\033[31;1m%s\033[0m人民幣" %user_salary)
28             break
29 else:
30     print("請輸入正確的工資")
技術分享

8、關於字典dict

字典有如下特點:

1) key-value格式,key是唯一的

2) 無序的

3) 查詢速度快

一個簡單的dcit字典的例子:

技術分享
1 info = {‘name‘:‘Dean‘,
2         ‘job‘:‘IT‘,
3         ‘age‘:23,
4         ‘company‘:‘XDHT‘
5         }
6 print(info)
技術分享

運行結果如下:

D:\python35\python.exe D:/python培訓/s14/day2/dcit-2.py

{‘company‘: ‘XDHT‘, ‘name‘: ‘Dean‘, ‘age‘: 23, ‘job‘: ‘IT‘}

從這裏也可看出字典是無序的

字典的增刪查改

技術分享

還有一種刪除數據,但是如果字典為空的時候會報錯,info.pop("name")

代碼例子如下:

技術分享
1 info = {‘name‘:‘Dean‘,
2         ‘job‘:‘IT‘,
3         ‘age‘:23,
4         ‘company‘:‘XDHT‘
5         }
6 print(info)
7 info.pop("name")
技術分享

程序運行結果如下:

D:\python35\python.exe D:/python培訓/s14/day2/dcit-2.py

{‘name‘: ‘Dean‘, ‘company‘: ‘XDHT‘, ‘age‘: 23, ‘job‘: ‘IT‘}

{‘company‘: ‘XDHT‘, ‘age‘: 23, ‘job‘: ‘IT‘}

Process finished with exit code 0

但是如果用info.pop()的時候,刪除的數據不存在就會報錯

將dict的key,value轉換成列表的形式顯示

print(info.items())

效果如下:

D:\python35\python.exe D:/python培訓/s14/day2/dcit-2.py

dict_items([(‘job‘, ‘IT‘), (‘company‘, ‘XDHT‘), (‘age‘, 23), (‘name‘, ‘Dean‘)])

特別說明一下,在python3.0中取消了has_key()的用法

而代替的方法是可以in或者not in

代碼例子:

if "name" in info

print("ok")

根據列表abc來創建dict裏的key,後面的test是默認的value,如果不指定就是None

info = {}

info = info.fromkeys(["a","b","c"],"test")

print(info)

運行結果如下:

info = {}

info = info.fromkeys(["a","b","c"],"test")

print(info)

info.keys() #打印出字典的key

info.values() #打印出字典的value

方法1

for key in info:

print(key,info[key])

方法2

for k,v in info.items():

print(k,v)

在實際中盡量不要用方法2,因為方法2的效率比方法1的效率低,方法2會先把dict字典轉換成list,所以數據大的時候不要用

9、關於字典的嵌套,代碼例子如下:

技術分享
 1 menu_dict={
 2     "河南省":{
 3         "焦作市":{
 4             "修武縣":{"AA","BB","CC"},
 5             "武陟縣":{"DD","EE","FF"},
 6             "博愛縣":{"GG","HH","II"}
 7         },
 8         "新鄉市":{
 9             "輝縣":{"AA","BB","CC"},
10             "封丘縣":{"DD","EE","FF"},
11             "延津縣":{"GG","HH","II"}
12         }
13     },
14     "河北省":{
15         "邢臺":{
16             "寧晉縣":{"AA","BB","CC"},
17             "內丘縣":{"DD","EE","FF"},
18             "邢臺縣":{"GG","HH","II"}
19         },
20         "唐山":{
21             "樂亭縣":{"AA","BB","CC"},
22             "唐海縣":{"DD","EE","FF"},
23             "玉田縣":{"GG","HH","II"}
24         }
25     }
26 }
技術分享

python---基礎之模塊,列表,元組,字典