Python中的列表
列表和C語(yǔ)言中的數(shù)組很像未斑,但列表的功能更強(qiáng)大虹统,可以存儲(chǔ)不同類型的數(shù)據(jù)
列表是Python中內(nèi)置有序可變序列染簇,列表的所有元素放在一對(duì)中括號(hào)“[]”中对室,并使用逗號(hào)分隔開(kāi)模燥;
一個(gè)列表中的數(shù)據(jù)類型可以各不相同咖祭,可以同時(shí)分別為整數(shù)、實(shí)數(shù)蔫骂、字符串等基本類型么翰,甚至是列表、字典以及其他自定義類型的對(duì)象纠吴。
weapon_list = ['98k', 'M4A1', 'SCAR', 'AWM']
print(weapon_list)
# 訪問(wèn)其中的元素硬鞍,使用索引的形式,索引是從零開(kāi)始
print(weapon_list[3])
列表元素的增加append()
向列表尾部追加一個(gè)元素戴已,不改變其內(nèi)存首地址,屬于原地操作锅减。
例如:
weapon_list = ['98k', 'M4A1', 'SCAR', 'AWM']
print('列表添加前', weapon_list)
weapon_list.append('MP5')
print('列表添加后', weapon_list)
列表添加后 ['98k', 'M4A1', 'SCAR', 'AWM', 'MP5']
刪除列表中的指定位置上的元素, 可以使用del關(guān)鍵字
del weapon_list[0]
print('列表刪除后', weapon_list)
測(cè)試列表中是否存在某元素 in
print('AWM' in weapon_list)
# True
len()
返回列表中的元素個(gè)數(shù)糖儡,同樣適用于元組、字典怔匣、集合握联、字符串等
print(len(weapon_list))
遍歷列表的三種方式
a = ['a','b','c','d','e','f']
for i in a:
print(i)
for i in range(len(a)):
print(i,a[i])
for i,ele in enumerate(a):
print(i,ele)
列表推導(dǎo)式
列表推導(dǎo)式使用非常簡(jiǎn)潔的方式來(lái)快速生成滿足特定需求的列表,代碼具有非常強(qiáng)的可讀性每瞒。
語(yǔ)法形式:[表達(dá)式 for 變量 in 序列或迭代對(duì)象]
列表推導(dǎo)式在邏輯上相當(dāng)于一個(gè)循環(huán)金闽,只是形式更加簡(jiǎn)潔。
lis = [i for i in range(100)]
print(lis)
使用列表推導(dǎo)式實(shí)現(xiàn)嵌套列表的平鋪
>>> vec = [[1,2,3], [4,5,6], [7,8,9]]
>>> [num for elem in vec for num in elem]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
列表切片
切片操作不是列表特有的剿骨,python中的有序序列都支持切片代芜,如字符串,元組浓利。
切片的返回結(jié)果類型和切片對(duì)象類型一致挤庇,返回的是切片對(duì)象的子序列,如:對(duì)一個(gè)列表切片返回一個(gè)列表贷掖,字符串切片返回字符串嫡秕。
li=["A","B","C","D"]
格式: li[start : end : step]
start是切片起點(diǎn)索引,end是切片終點(diǎn)索引苹威,但切片結(jié)果不包括終點(diǎn)索引的值昆咽。step是步長(zhǎng)默認(rèn)是1。
t=li[0:3] ["A","B","C"] #起點(diǎn)的0索引可以省略牙甫,t=li[:3]
t=li[2: ] ["C","D"] #省略end掷酗,則切到末尾
t=li[1:3] ["B","C"]
t=li[0:4:2] ["A","C"] #從li[0]到li[3],設(shè)定步長(zhǎng)為2。
元組
元組屬于不可變序列(元素集合)腹暖,一旦創(chuàng)建汇在,用任何方法都不可以修改其元素。從形式上脏答,元組的所有元素放在一對(duì)圓括號(hào)中糕殉,元素之間用逗號(hào)分隔亩鬼。
>>>x = (1,2,3) #直接把元組賦值給一個(gè)變量
>>>x
(1,2,3)
元組與列表的區(qū)別
- 元組中的數(shù)據(jù)一旦定義就不允許更改。
- 元組沒(méi)有append()阿蝶、extend()和insert()等方法雳锋,無(wú)法向元組中添加元素。
- 元組沒(méi)有remove()或pop()方法羡洁,也無(wú)法對(duì)元組元素進(jìn)行del操作玷过,不能從元組中刪除元素。
- 從效果上看筑煮,tuple( )凍結(jié)列表辛蚊,而list( )融化元組。
元組的優(yōu)點(diǎn)
- 元組的速度比列表更快真仲。
- 元組對(duì)不需要改變的數(shù)據(jù)進(jìn)行“寫保護(hù)”將使得代碼更加安全袋马。
- 元組可用作字典鍵(特別是包含字符串、數(shù)值和其它元組這樣的不可變數(shù)據(jù)的元組)秸应。元組有時(shí)還作為函數(shù)的返回值返回(返回多個(gè)值)
字典
字典定義
字典(dictionary)是包含若干“鍵:值”元素的無(wú)序可變序列虑凛,字典中的每個(gè)元素包含“鍵”和“值”兩部分,定義字典時(shí)软啼,每個(gè)元素的鍵和值用冒號(hào)分隔桑谍,元素之間用逗號(hào)分隔,所有的元素放在一對(duì)大括號(hào)“{}”中祸挪。字典中的鍵可以為任意不可變數(shù)據(jù)锣披,比如整數(shù)、實(shí)數(shù)匕积、字符串盈罐、元組等等。
字典的創(chuàng)建
>>> a_dict = {'server': 'db.neuedu.com', 'database': 'mysql'}
>>> a_dict
{'database': 'mysql', 'server': 'db.neuedu.com'}
>>> x = {} #空字典
>>> x
{}
字典元素的讀取
以鍵作為下標(biāo)可以讀取字典元素闪唆,若鍵不存在則拋出異常
aDict = {'name':'趙四', 'sex':'male', 'age':37}
print(aDict['name'])
字典元素的添加和修改
當(dāng)以指定鍵為下標(biāo)為字典賦值時(shí)盅粪,若鍵存在,則可以修改該鍵的值悄蕾;若不存在票顾,則表示添加一個(gè)鍵、值對(duì)帆调。
aDict['addr'] = '象牙山'
print(aDict)
aDict['name'] = '謝廣坤'
print(aDict) # {'name': '謝廣坤', 'sex': 'male', 'age': 37}
字典刪除
- 使用del刪除整個(gè)字典奠骄,或者字典中的指定元素
- 使用pop()和popitem()方法彈出并刪除指定元素
- 使用clear()方法清空字典中所有元素
del aDict['age']
print(aDict)
集合
集合是無(wú)序可變序列,使用一對(duì)大括號(hào)界定番刊,元素不可重復(fù)含鳞,同一個(gè)集合中每個(gè)元素都是唯一的。集合中只能包含數(shù)字芹务、字符串蝉绷、元組等不可變類型的數(shù)據(jù)鸭廷,而不能包含列表、字典熔吗、集合等可變類型的數(shù)據(jù)辆床。
創(chuàng)建一個(gè)集合
a = {3, 5}
type(a)
Python中的函數(shù)
函數(shù)一詞起源于數(shù)學(xué),但是在編程中的函數(shù)和數(shù)學(xué)中的有很大不同桅狠。編程中的函數(shù)式組織好的讼载,可重復(fù)使用的,用于實(shí)現(xiàn)單一功能或相關(guān)聯(lián)功能的代碼塊中跌。
我們?cè)趯W(xué)習(xí)過(guò)程中已經(jīng)使用過(guò)一些python內(nèi)建的函數(shù)咨堤,如print()。但我們也可以自己創(chuàng)建函數(shù)漩符,這被叫做用戶自定義函數(shù)吱型。
使用函數(shù)的好處
- 避免代碼的冗余
- 讓程序代碼結(jié)構(gòu)更加清晰
- 讓代碼具有復(fù)用性,便于維護(hù)
函數(shù)的定義格式
函數(shù)名的命名規(guī)則:
函數(shù)名必須以下劃線或字母開(kāi)頭陨仅,可以包含任意字母、數(shù)字或下劃線的組合铝侵。不能使用任何的標(biāo)點(diǎn)符號(hào)灼伤; 函數(shù)名是區(qū)分大小寫的。 函數(shù)名不能是保留字
遞歸函數(shù)
斐波那契數(shù)列:
- 斐波那契數(shù)列(Fibonacci sequence)咪鲜,又稱黃金分割數(shù)列狐赡、因數(shù)學(xué)家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數(shù)列”
- 指的是這樣一個(gè)數(shù)列:1疟丙、1颖侄、2、3享郊、5览祖、8、13炊琉、21展蒂、34、……在數(shù)學(xué)上苔咪,斐波那契數(shù)列以如下被以遞推的方法定義:F(1)=1锰悼,F(xiàn)(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)
-
在現(xiàn)代物理团赏、準(zhǔn)晶體結(jié)構(gòu)箕般、化學(xué)等領(lǐng)域,斐波納契數(shù)列都有直接的應(yīng)用舔清,為此丝里,美國(guó)數(shù)學(xué)會(huì)從 1963 年起出版了以《斐波納契數(shù)列季刊》為名的一份數(shù)學(xué)雜志曲初,用于專門刊載這方面的研究成果
使用遞歸實(shí)現(xiàn)斐波那契數(shù)列:
使用循環(huán)實(shí)現(xiàn)斐波那契數(shù)列:
Python中的類
面向?qū)ο笞钪匾母拍罹褪穷悾╟lass)和實(shí)例(instance),類是抽象的模板丙者,比如學(xué)生這個(gè)抽象的事物复斥,可以用一個(gè)Student類來(lái)表示。而實(shí)例是根據(jù)類創(chuàng)建出來(lái)的一個(gè)個(gè)具體的“對(duì)象”械媒,每一個(gè)對(duì)象都從類中繼承有相同的方法目锭,但各自的數(shù)據(jù)可能不同
以Student類為例,在Python中纷捞,定義類如下
class Student(object):
pass
#(Object)表示該類從哪個(gè)類繼承下來(lái)的痢虹,Object類是所有類都會(huì)繼承類。
實(shí)例:定義好了類主儡,就可以通過(guò)Student類創(chuàng)建出Student的實(shí)例奖唯,創(chuàng)建實(shí)例是通過(guò)類名+()實(shí)現(xiàn):
student = Student()
由于類起到模板的作用,因此糜值,可以在創(chuàng)建實(shí)例的時(shí)候丰捷,把我們認(rèn)為必須綁定的屬性強(qiáng)制填寫進(jìn)去。這里就用到Python當(dāng)中的一個(gè)內(nèi)置方法init方法寂汇,例如在Student類時(shí)病往,把name、score等屬性綁上去:
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
這里注意:(1)骄瓣、init方法的第一參數(shù)永遠(yuǎn)是self停巷,表示創(chuàng)建的類實(shí)例本身,因此榕栏,在init方法內(nèi)部畔勤,就可以把各種屬性綁定到self,因?yàn)閟elf就指向創(chuàng)建的實(shí)例本身扒磁。(2)庆揪、有了init方法,在創(chuàng)建實(shí)例的時(shí)候渗磅,就不能傳入空的參數(shù)了嚷硫,必須傳入與init方法匹配的參數(shù),但self不需要傳始鱼,Python解釋器會(huì)自己把實(shí)例變量傳進(jìn)去
lass Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
def print_score(self):
print("學(xué)生名字是{}, 分?jǐn)?shù)是{}".format(self.name, self.score))
stu = Student('趙四', 88)
stu.print_score()