Python列表定義:按特定順序排列的元素組成。在Python中,用方括號[]來(lái)表示列表,并用逗號來(lái)分隔其中的元素。Python列表是編程中很常見(jiàn)的數據類(lèi)型 。
列表是一種可修改的集合類(lèi)型,其元素可以是數字、string等基本類(lèi)型,也可以是列表、元組、字典等集合對象,甚至可以是自定義的類(lèi)型。其定義方式如下:>>> nums = [1,2,3,4]>>> type(nums)>>> print nums[1, 2, 3, 4]>>> strs = ["hello","world"]>>> print strs['hello', 'world']>>> lst = [1,"hello",False,nums,strs]>>> type(lst)>>> print lst[1, 'hello', False, [1, 2, 3, 4], ['hello', 'world']]
下面我們來(lái)看一下列表中有哪些常見(jiàn)的方法:count():統計某個(gè)元素在列表中出現的次數。index():從列表中找出某個(gè)值第一個(gè)匹配項的索引位置。append():在列表末尾添加新對象。extend():在列表末尾一次性追加另一個(gè)序列的多個(gè)值。insert():在列表的指定位置插入對象。pop():移除列表中的一個(gè)元素(默認最后一個(gè)元素),并且返回該元素的值。remove():移除列表中某個(gè)值的第一個(gè)匹配項。reverse():將列表中的元素反向,不重新拷貝一個(gè)列表。reversed():將列表中的元素反向,重新拷貝一個(gè)列表。sort():將列表中的元素排序,不重新拷貝一個(gè)列表。sortd():將列表中的元素排序,重新拷貝一個(gè)列表。copy():淺拷貝,只是給原來(lái)的列表貼上了一個(gè)新標簽,對于一個(gè)復雜對象的子對象并不會(huì )完全復制,如果有子列表,改變原來(lái)的值,新的拷貝對象也會(huì )改變。deepcopy():深拷貝,將復雜對象的每一層復制一個(gè)單獨的個(gè)體出來(lái)。就是完全拷貝。常見(jiàn)內置函數:max()、min()、sum()、len()、all()、any()、zip()、enumerate()
class A:
def __init__(self):
pass
a1=a2=a3=a4=A()
instances_of_A = []
for value in globals().values():
if isinstance(value,A):
instances_of_A.append(value)
#instances_of_A is a list containing all instances of A in global scope.
1、添加元素
添加元素使用列表的內置方法append
number = [1, 2, 3, 4]
number.append(5) # number = [1, 2, 3, 4, 5]
number.append([6,7]) # number = [1, 2, 3, 4, 5, [6, 7]]
number.append({'a':'b'}) # number = [1, 2, 3, 4, [6, 7], {'a', :'b'}
可以看到強大的python列表可以嵌套任意類(lèi)型
2、列表相加
要想連接兩個(gè)列表,可以使用+號連接
a = [1, 2, 3]
b = [4, 5, 6]
c = a + b # c = [1, 2, 3, 4, 5, 6]
也可以使用列表內置方法extend連接兩個(gè)列表
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b) # a = [1, 2, 3, 4, 5, 6]
用+號會(huì )創(chuàng )建一個(gè)新通對象,使用extend則在原來(lái)的對象上面修改
3、列表去重復
列表本身沒(méi)有去除重復的功能,但是可以借助python的另外一個(gè)類(lèi)型set(help(set)查看)
a = [1, 2, 3, 3,2, 1]
b = list(set(a)) # b = [1, 2, 3]
也可以借助字典類(lèi)型的內置方法
a = [1, 2, 2, 3, 1, 3]
b = {}.fromkeys(a).keys() # b = [1, 2, 3]
一些常用的方法1. 逆轉字符串的三種方法1.1. 模擬C++中方法, 定義一個(gè)空字符串來(lái)實(shí)現 通過(guò)設置一個(gè)空字符串, 然后講參數中的字符串從后往前遍歷, 使用字符串的加法合并為新的字符串 復制代碼 代碼如下:def reverse(text) : str = '' index = len(text) - 1 while index >= 0 : str += text[index] index -= 1 return str1.2. 使用切片法 這個(gè)是Python中的一個(gè)特性, 切片可以取負值,這是采用切片的方法,設置步長(cháng)為-1,這樣就實(shí)現了反過(guò)來(lái)排序。
復制代碼 代碼如下:def reverse_1(text) : return text[::-1]1.3. 使用列表 采用列表的reverse方法,先將text轉換為列表,然后通過(guò)reverse方法反轉,然后在通過(guò)join連接為字符串。復制代碼 代碼如下:def reverse_2(text) : temp = list(text) temp.reverse() return ''.join(temp)2. 使用reduce 使用匿名函數和reduce() 復制代碼 代碼如下:def reverse_3(text) : return reduce(lambda x, y : y + x, text) print reverse_3("Hello")3. 遍歷字典的四種方法 復制代碼 代碼如下:dict={"a":"apple","b":"banana","o":"orange"} print "##########dict######################" for i in dict: print "dict[%s]=" % i,dict[i] print "###########items#####################" for (k,v) in dict.items(): print "dict[%s]=" % k,v print "###########iteritems#################" for k,v in dict.iteritems(): print "dict[%s]=" % k,v print "###########iterkeys,itervalues#######" for k,v in zip(dict.iterkeys(),dict.itervalues()): print "dict[%s]=" % k,v4. 遍歷list的三種方法 復制代碼 代碼如下:for key in lst : print key for i in range(len(lst)) : print lst[i] for index, key in enumerate(lst) : print key //index是list的索引5. 字典排序的方法 字典按照value的值從大到小的順序來(lái)排序(默認從小到排序)。
復制代碼 代碼如下:dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0} dict= sorted(dic.iteritems(), key=lambda d:d[1], reverse = True) print dict//輸出的結果:[('aa', 74), ('a', 31), ('bc', 5), ('asd', 4), ('c', 3), ('d', 0)] 下面我們分解下代碼 print dic.iteritems() 得到[(鍵,值)]的列表。然后用sorted方法,通過(guò)key這個(gè)參數,指定排序是按照value,也就是第一個(gè)元素d[1的值來(lái)排序。
reverse = True表示是需要翻轉的,默認是從小到大,翻轉的話(huà),那就是從大到小。對字典按鍵(key)排序:復制代碼 代碼如下:dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0} dict= sorted(dic.iteritems(), key=lambda d:d[0]) # d[0]表示字典的鍵 print dict#sorted中第三個(gè)可選參數為reverse, True表示從大到小排序#默認reverse = False6. 子類(lèi)和父類(lèi) 子類(lèi)構造函數調用父類(lèi)的初始化構造函數 復制代碼 代碼如下:class A(object) : def __init__(self) : print "testA class B(A) : def __init__(self) : A.__init__(self) 子類(lèi)調用父類(lèi)的同名函數 復制代碼 代碼如下:super().fuleifunction()7. 更靈活的參數傳遞方式 復制代碼 代碼如下:func2(a=1, b=2, c=3) #默認參數 func3(*args) #接受任意數量的參數, 以tuple的方式傳入 func4(**kargs) #把參數以鍵值對字典的形式傳入 在變量前加上星號前綴(*),調用時(shí)的參數會(huì )存儲在一個(gè) tuple()對象中,賦值給形參。
在函數內部,需要對參數進(jìn)行處理時(shí),只要對這個(gè) tuple 類(lèi)型的形參(這里是 args)進(jìn)行操作就可以了。因此,函數在定義時(shí)并不需要指明參數個(gè)數,就可以處理任意參數個(gè)數的情況。
復制代碼 代碼如下:def calcSum(*args): sum = 0 for i in args: sum += i print sum#調用:calcSum(1,2,3) calcSum(123,456) calcSum()#輸出:65790################################# def printAll(**kargs): for k in kargs: print k, ':', kargs[k] printAll(a=1, b=2, c=3) printAll(x=4, y=5)#輸出:a : 1 c : 3 b : 2 y : 5 x : 4 python的中參數可以多種形式進(jìn)行組合, 在混合使用時(shí),首先要注意函數的寫(xiě)法,必須遵守:1.帶有默認值的形參(arg=)須在無(wú)默認值的形參(arg)之后2.元組參數(*args)須在帶有默認值的形參(arg=)之后3.字典參數(**kargs)須在元組參數(*args)之后 在函數被調用時(shí),參數的傳遞過(guò)程為:1.按順序把無(wú)指定參數的實(shí)參賦值給形參2.把指定參數名稱(chēng)(arg=v)的實(shí)參賦值給對應的形參3.將多余的無(wú)指定參數的實(shí)參打包成一個(gè) tuple 傳遞給元組參數(*args)4.將多余的指定參數名的實(shí)參打包成一個(gè) dict 傳遞給字典參數(**kargs)8. lambda 表達式 lambda 表達式可以看做一種匿名函數 lambda 表達式的語(yǔ)法格式: lambda 參數列表: 表達式 #參數列表周?chē)鷽](méi)有括號,返回值前沒(méi)有 return 關(guān)鍵字,也沒(méi)有函數名稱(chēng) 復制代碼 代碼如下:def fn(x): return lambda y: x + y#調用 a = fn(2) print a(3)#輸出5 分析: fn(2)調用后, 相當于a = lambda y: 2 + y, 然后a(3)被調用時(shí).相當于 print lambda y: 2 + 3。
千鋒武漢Python需要學(xué)習的技術(shù):第一階段 python語(yǔ)言基礎學(xué)完此階段:掌握python腳本、python界面編程能力掌握數據庫掌握基本爬蟲(chóng)掌握多線(xiàn)程多進(jìn)程開(kāi)發(fā)能力第二階段 python web開(kāi)發(fā)學(xué)完此階段:掌握前端知識掌握python三大后端框架獨立開(kāi)發(fā)網(wǎng)站第三階段 python爬蟲(chóng)學(xué)完此階段:掌握python爬蟲(chóng)技術(shù)掌握多線(xiàn)程爬蟲(chóng)技術(shù)掌握分布式爬蟲(chóng)技術(shù)第四階段 python數據分析學(xué)完此階段:掌握python數據分析掌握python數據可視化掌握python機器學(xué)習。
##注意:最左邊每個(gè)=表示一個(gè)空格
class Student:
====def __init__(self,xh,xm,pshchj,khchj):
========self.xh=xh
========self.xm=xm
========self.pshchj=float(pshchj)
========self.khchj=float(khchj)
========self.jszp()
##====計算總評
====def jszp(self):
========self.zp=self.pshchj*0.3+self.khchj*0.7
##====顯示
====def show(self):
========print("姓名:{0},平時(shí)成績(jì):{1:f},考核成績(jì):{2:f}".format(self.xm,round(self.pshchj,1),round(self.khchj,1)))
stus=[]
filename="保存學(xué)生信息.txt"
##輸入所有學(xué)生的信息
i,n=1,int(input("請輸入學(xué)生的數量:"))
while i<=n:
====stus.append(Student(*(input("請輸入第{0:d}個(gè)學(xué)生的學(xué)號,姓名,平時(shí)成績(jì),考核成績(jì)(空格分割):\n".format(i)).split())))
====i+=1
##顯示所有學(xué)生的信息
print("你輸入的所有學(xué)生的信息:")
for stu in stus:
====stu.show()
====
##按學(xué)生學(xué)號排序學(xué)生列表
stus.sort(key=lambda stu : stu.xh)
##保存所有學(xué)生的信息到文件
ft="{0:<10}{1:<8}{2:<12f}{3:<12f}{4:f}\n"
stu_info=""
for stu in stus:
====stu_info+=ft.format(stu.xh,stu.xm,stu.pshchj,stu.khchj,stu.zp)
with open(filename,"w") as fo:
====fo.write(stu_info)
主要特點(diǎn)就是需要綁定到一個(gè)對象上,python解析器會(huì )自動(dòng)把實(shí)例自身傳遞給方法,如14行所示,而直接使用InstanceMethod.f1()調用方法是不行的。
class InstanceMethod(object):
def __init__(self, a):
self.a = a
def f1(self):
print 'This is {0}.'.format(self)
def f2(self, a):
print 'Value:{0}'.format(a)
if __name__ == '__main__':
# im = InstanceMethod()
im = InstanceMethod('233')
im.f1()
# im.f2()
im.f2(233)
這里介紹幾個(gè)常用的列表操作:
1、添加元素
添加元素使用列表的內置方法append
number = [1, 2, 3, 4]
number.append(5) # number = [1, 2, 3, 4, 5]
number.append([6,7]) # number = [1, 2, 3, 4, 5, [6, 7]]
number.append({'a':'b'}) # number = [1, 2, 3, 4, [6, 7], {'a', :'b'}
可以看到強大的python列表可以嵌套任意類(lèi)型
2、列表相加
要想連接兩個(gè)列表,可以使用+號連接
a = [1, 2, 3]
b = [4, 5, 6]
c = a + b # c = [1, 2, 3, 4, 5, 6]
也可以使用列表內置方法extend連接兩個(gè)列表
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b) # a = [1, 2, 3, 4, 5, 6]
用+號會(huì )創(chuàng )建一個(gè)新通對象,使用extend則在原來(lái)的對象上面修改
3、列表去重復
列表本身沒(méi)有去除重復的功能,但是可以借助python的另外一個(gè)類(lèi)型set(help(set)查看)
a = [1, 2, 3, 3,2, 1]
b = list(set(a)) # b = [1, 2, 3]
也可以借助字典類(lèi)型的內置方法
a = [1, 2, 2, 3, 1, 3]
b = {}.fromkeys(a).keys() # b = [1, 2, 3]
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:2.594秒