#python數據類型
python的數據類型: list,dict,tuple,set,String,Number,Boolean,None
其中可變的的有:list胆剧,dict
不可變的:其他都不可變
字符串的重要性
操作文本或者數據可是件大事秩霍。如果不相信,就仔細看看當今計算機都在做什么工作:
文字處理鸽照、網頁表單的填寫矮燎、來自數據庫
轉儲的信息流赔癌、股票報價灾票、新聞等等,而且這個清單還會不斷增長既们。
什么是字符串贤壁?
是由數字脾拆、字母、下劃線組成的一串文字绰上。它是編程語言中表示文本的數據類型渠驼。
簡單的說就是用單引號或者雙引號括起來的文本迷扇。
字符串的處理
創(chuàng)建字符串
str1 = "hi,Look at this girl, she's really beautiful"
print(str1)
字符串的連接
str2 = "i love her"
str3 = str1 + str2
print("str3=",str3)
字符串的復制
str4 = str2 * 3
print(str4)
字符串的長度
print(len("beautiful"))
count(str[,start][,end])
返回字符串中某個單詞出現的次數蜓席,可以指定一個范圍器一,默認從頭到尾
str5 = "hi,Look at this girl, she's really beautiful"
print(str5.count("girl", 16,len(str5) ))
find(str[, start][,end])
從左向右檢測str字符串是否包含在字符串中厨内,可以指定范圍祈秕,默認從頭到尾。得到的是第一次出現的開始下標雏胃,沒有返回-1
print(str5.find("girl"))
print(str5.find("one"))
split(str="", num)
以str為分隔符截取字符串,指定num请毛,則僅截取num個字符串
str6 = "hi,Look at this girl, she's really beautiful"
list7 = str6.split(" ")
print(list7)
join(seq) 以指定的字符串分隔符瞭亮,將seq中的所有元素組合成一個字符串
print(list7)
str8 = "#".join(list7)
str9 = " ".join(list7)
print(str8)
print(str9)
list列表
列表是最常用的Python數據類型方仿,它可以作為一個方括號內的逗號分隔值出現兼丰。
列表的數據項不需要具有相同的類型
list10 = [1,2,3,4,5,]
print(list10)
list11 = [1,2,3,"hello",1,2,3]
print(list11)
列表元素的訪問,注意不要越界了(下標超出可表示的范圍)
list12 = [1,2,3,"hello",1,2,3]
print(list12[3])
print(list13[7])
列表的替換
list12[3] = "beautiful girl"
print(list12)
列表的組合和string一樣
list13 = [1,2,3]
list14 = [4,5,6]
list15 = list13 + list14
print(list15)
列表的重復也和string一樣
list16 = list13 * 3
print(list16)
判斷元素是否在列表中,在返回True,不在False
list17 = [1,2,3,"hello",1,2,3]
print("hello" in list17)
列表的截取,如果超出邊界,沒事
list18 = [1,2,3,"hello",1,2,3]
print(list18[3:6])
二維列表
list19 = [[1,2],[3,4],[5,6]]
print(list19[1][1])
列表的append方法,在末尾添加元素
list20 = [1,2,3]
list20.append(1)
print(list20)
list21 = [1,2,3,4]
list21.append([4,5])
print(list21)
list22 = [1,2,3]
list22.extend([4,5,6])
print(list22)
列表的insert方法
list23 = [1,2,"hello",1,2]
list23.insert(3,"girl")
print(list23)
list24 = [1,2,"hello",1,2]
list24.insert(3,[3,4])
print(list24)
列表的刪除
第一種:pop刪除
pop(x=list[-1])
移除列表中指定下標處的元素(默認移除最后一個元素),并返回刪除的數據
list25 = [1,2,3,4,5]
list25.pop()
list25.pop(2)
print(list25.pop(1))
print(list25)
第二種:remove刪除
remove 移除列表中的某個元素第一個匹配的結果
list26 = [1,2,3,4,5,5,5]
list26.remove(5)
print(list26)
第三種:del刪除,根據索引暖释,刪除元素
list27 = [1,2,3,4,5]
del(list27[4])
print(list27)
第四種:clear()方法,刪除整個列表中的元素
list28 = [1,2,3,4,5]
list28.clear()
print(list28)
從列表中找出某個值第一個匹配的索引值
list29 = [1,2,3,4,5,6,7,8,9]
index29 = list29.index(3)
print(index29)
列表中元素個數
list30 = [1,2,3,4,5]
print(len(list30))
列表的Max纹磺、min方法
list31 = [1,2,3,4,5]
print(max(list31))
print(min(list31))
列表的count方法
list32 = [1,1,1,2,3,4,5]
print(list32.count(1))
列表的排序
list33 = [1,3,5,7,2,4,6,8,1,1.1]
list33.sort()
print(list33)
list34 = [1,3,5,7,2,4,6,8,1,1.1]
list34.reverse()
print(list34)
淺拷貝和深拷貝
1,深淺拷貝都是對源對象的復制,占用不同的內存空間衷佃。
2锄列,不可變類型的對象竣况,對于深淺拷貝毫無影響丹泉,最終的地址值和值都是相等的。
3晒哄,可變類型:
=淺拷貝: 值相等,地址相等
copy淺拷貝:值相等较木,地址不相等
deepcopy深拷貝:值相等预侯,地址不相等
淺拷貝: = 的淺拷貝
list35 = [1,2,3,4,5]
list36 = list35
print(list35)
print(list36)
print(id(list35))
print(id(list36))
copy的淺拷貝
list37 = [1,2,3,4,5]
list38 = list37.copy()
print(list37)
print(list38)
print(id(list37))
print(id(list38))
深度拷貝
import copy
list39 = [1,2,3,4,5]
list40 = copy.deepcopy(list39)
print(list39)
print(list40)
print(id(list39))
print(id(list40))
淺拷貝和深拷貝的區(qū)別:
淺拷貝(copy):拷貝父對象,不會拷貝對象的內部的子對象校坑。
深拷貝(deepcopy):copy模塊的deepcopy方法,完全拷貝了父對象及其子對象徐绑。
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始對象
b = a #賦值毅访,傳對象的引用
a.append(5)
c = copy.copy(a) #對象拷貝,淺拷貝
d = copy.deepcopy(a) #對象拷貝守呜,深拷貝
a.append(5) #修改對象a
a[4].append('c') #修改對象a中的['a', 'b']數組對象
print( 'a = ', a )
print( 'b = ', b )
print( 'c = ', c )
print( 'd = ', d )
列表的轉化
元組轉列表
list41 = list((1,2,3,4,5))
print(list41)
列表轉元組
tuple42 = tuple([1,2,3,4,5])
print(tuple42)
列表的去重
list43 = [1,1,2,3,4,5]
set(list43)
for i in list43:
print(i)
dict字典
字典是另一種可變容器模型郁竟。
概述:
使用鍵-值(key-value)存儲憔晒,中間用冒號:分割,具有極快的查找速度
注意:字典是無序的
key的特性:
1从撼、字典中的key必須唯一
2婆翔、key必須是不可變對象
3、字符串最蕾、整數等都是不可變的,可以作為key
4醋拧、list是可變的丹壕,不能作為key
dict44 = {"Bili":"北京","twodog":"shenzhen"}
print(dict44)
元素的訪問
獲取:字典名[key]
print(dict44["Bili"])
print(dict44.get("Bili"))
key_name = dict44.get("twodog")
if key_name == None:
print("沒有")
else:
print("有")
補充,拓展
python中的命名規(guī)范
不要用系統(tǒng)的關鍵詞
import keyword
print(keyword.kwlist)
模塊
模塊盡量使用小寫命名薄啥,首字母保持小寫垄惧,盡量不要用下劃線
import copy
類名
ThisClass
函數
函數名一律小寫到逊,如果有多個單詞,用下劃線隔開
def post():
pass
變量名
變量名盡量小寫, 如有多個單詞铜靶,用下劃線隔開
django中manage.py文件中
if name == 'main':
count = 0
student_name = "twodog"
當.py文件被直接運行時已艰,if name == 'main'之下的代碼塊將被運行;
當.py文件以模塊形式被導入時,if name == 'main'之下的代碼塊不被運行。
對于很多編程語言來說呢蔫,程序都必須要有一個入口,比如C飒筑,C++片吊,以及完全面向對象的編程語言Java,C等。
如果你接觸過這些語言,對于程序入口這個概念應該很好理解腾务,C,C++都需要有一個main函數作為程序的入口岩瘦,
也就是程序的運行會從main函數開始窿撬。同樣劈伴,Java饼拍,C必須要有一個包含Main方法的主類,作為程序入口师抄。
而Python則不同叨吮,它屬于腳本語言瞬矩,不像編譯型語言那樣先將程序編譯成二進制再運行,而是動態(tài)的逐行解釋運行媚污。
也就是從腳本第一行開始運行堰怨,沒有統(tǒng)一的入口。
一個Python源碼文件(.py)除了可以被直接運行外烹困,還可以作為模塊(也就是庫),被其他.py文件導入乾吻。
不管是直接運行還是被導入髓梅,.py文件的最頂層代碼都會被運行(Python用縮進來區(qū)分代碼層次),
而當一個.py文件作為模塊被導入時绎签,我們可能不希望一部分代碼被運行
常量名
全大寫枯饿,如果有多個單詞用下劃線分隔
SOCIAL_AUTH_WEIBO_KEY = '123456'
SOCIAL_AUTH_WEIBO_SECRET = '12345678901234567890'
字典的添加
dict45 = {"Bili":"北京","twodog":"shenzhen"}
dict45["yellowhair"] = "shenzhen"
print(dict45)
字典的修改
因為一個key對應一個value,所以,多次對一個key的value賦值诡必,其實就是修改值
dict1["lilei"] = 80
dict45["twodog"] = "changsha"
print(dict45)
刪除
dict45.pop("yellowhair")
print(dict45)
遍歷
遍歷鍵
for key in dict45:
print(key, dict45[key])
遍歷值
for value in dict45.values():
print(value)
遍歷字典項
for k, v in dict45.items():
print(k, v)
遍歷字典健值
for k, v in enumerate(dict45):
print(k, v)
和list比較
1奢方、查找和插入的速度極快,不會隨著key-value的增加而變慢
2擒权、需要占用大量的內存袱巨,內存浪費多
list
1、查找和插入的速度隨著數據量的增多而減慢
2碳抄、占用空間小愉老,浪費內存少
tuple元組
tuple
本質:是一種有序集合
特點:
1、與列表非常相似
2剖效、一旦初始化就不能修改
3嫉入、使用小括號
創(chuàng)建一個元組,如果只有一個元素璧尸,需要加逗號
tuple46 = (1,)
print(tuple46)
tuple47 = (1,2,3,"hello",1,2,3)
print(tuple47)
tuple48 = (1,2,3,4,5)
print(tuple48[0])
print(tuple48[-1])
超出邊界
print(tuple48[-6])
修改元組
tuple49 = (1,2,3,4,5)
tuple49[0] = 10
print(tuple49)
tuple50 = (1,2,3,[4,5])
tuple50[-1][0] = 100
print(tuple50)
刪除元組
tuple51 = (1,2,3,4,5)
del tuple51
print(tuple51)
元組的操作
tuple52 = (1,2,3)
tuple53 = (4,5,6)
print(tuple52+tuple53)
判斷元素是否在元組中
tuple54 = (1,2,3,4,5)
print(2 in tuple54)
元組的截取,前閉后開區(qū)間
tuple55 = (1,2,3,4,5)
tuple56 = tuple55[1:3]
print(tuple56)
tuple57 = tuple55[:4]
tuple58 = tuple55[3:]
二維元組咒林,元素是一維元組的元組
tuple59 = ((1,2),(3,4),(5,6),(7,8,9))
print(tuple59)
print(tuple59[3][2])
返回元組中的個數
tuple60 = (1,2,3,4,5)
print(len(tuple60))
返回元組中的最大值和最小值
tuple61 = (1,2,3,4,5)
print(max(tuple61))
print(min(tuple61))
元組的遍歷
tuple62 = (1,2,3,4,5)
for i in tuple62:
print(i)
set集合
set:類似dict,是一組key的集合爷光,不存儲value
本質:無序和無重復元素的集合
創(chuàng)建set需要一個list或者tuple或者dict作為輸入集合
重復元素在set中會自動被過濾
set63 = set([1,2,3,4,5,1,2,3,4,5])
print(set63)
set64 = set((1,2,3,1,2,3))
print(set64)
set65 = set({"Bili":"beijing", "twodog":"shenzhen"})
print(set65)
添加
set66 = set([1,2,3,4,5])
set66.add(6)
print(set66)
set66.add((7,8,9))
print(set66)
刪除,刪除的是值
set67 = set([1,2,3,4,5])
set67.remove(3)
print(set67)
遍歷
set68 = ([1,2,3,4,5])
for i in set68:
print(i)
for index, data in enumerate(set68):
print(index, data)
set69 = set([1,2,3,4,5])
set70 = set([2,3,4,7,8])
交集
set71 = set69 & set70
print(set71)
print(type(set71))
并集
set72 = set69 | set70
print(set72)
print(type(set72))
number數字
分類:整數垫竞、浮點數、復數蛀序,其中整數包括正整數和負整數欢瞪,和數學中的寫法一樣
數字類型的轉換
什么是庫?庫就是封裝了一些方法的函數
import math
import random
f1 = 1.1
f2 = 2
print(f1+f2)
數字類型轉換
print(int(2.9))
2
print(float(1))
print(int("12345"))
print(float("12.345"))
如果有其他無用字符會報錯
print(int("abc"))
print(int("123abc"))
只有作為正負號才有意義
print(int("+12345"))
print(int("12+3"))
print(int("-12345"))
print(int("12-3"))
數學功能
返回數字的絕對值
a1 = -10
a2 = abs(a1)
print(a2)
比較兩個數的大小
a3 = 100
a4 = 9
print((a3>a4)-(a3<a4))
返回給定參數的最大值
print(max(1,2,3,4,5,6,7,8))
返回給定參數的最小值
print(min(1,2,3,4,5,6,7,8))
求x的y次方 2^5
print(pow(2, 5))
round(x[,n])返回浮點數x的四舍五入的值徐裸,如果給出n值遣鼓,則代表舍入到小數點后n位
print(round(3.141592654))
print(round(3.141592654))
print(round(3.141592654, 2))
print(round(3.141592654, 1))
向上取整
print(math.ceil(1.1))
print(math.ceil(1.9))
向下取整
print(math.floor(1.1))
print(math.floor(1.9))
返回整數部分與小數部分
print(math.modf(2.3))
開方
print(math.sqrt(9))
隨機數
1從序列的元素中隨機挑選一個元素
print(random.choice([1,3,5,7,9]))
print(random.choice(range(5)))#range(5) == [0,1,2,3,4]
print(random.choice("girl"))#"sunck" == ["s","u","n","c","k"]
產生一個1~100之間的隨機數
r1 = random.choice(range(10)) + 1
print(r1)
從指定范圍內,按指定的基數遞增的集合中選取一個隨機數
random.randrange([start,] stop[, step])
start--指定范圍的開始值重贺,包含在范圍內骑祟,默認是0
stop--指定范圍的結束之回懦,不包含在范圍內
step--指定的遞增基數,默認是1
print(random.randrange(1, 100, 2))
從0-99選取一個隨機數
print(random.randrange(100))
隨機生產[0,1)之間的數(浮點數)
print(random.random())
list = [1,2,3,4,5]
將序列的所有元素隨機排序
random.shuffle(list)
print(list)
隨機生產一個實數次企,他在[3,9]范圍
print(random.uniform(3,9))