Python高階用法與技巧

2021-10-06 05:56:25 字數 2813 閱讀 7439

在for迭代過程中,如果想要同時獲取值和索引,可以採用enumerate方法,用法如下:

l =

["asdf",1

,5]for i,value in

enumerate

(l):

print

(i,value)

#i = index, value = object

常用場景為,給出乙個可迭代物件,如list,返回物件的最大值和其索引

l =[1

,2,3

,4,5

]def

findmaxandindex

(l):

tempmax = l[0]

tempindex =

0for index,value in

enumerate

(l):

if tempmax <= value:

tempmax = value

tempindex = index

return

(tempmax, tempindex)

print

(findmaxandindex(l)

)

另外,enumerate(seq, start),預設start是從0開始索引,如果要改變為從1開始索引,可以改為for i,value in enumerate(l,1):

凡是可迭代物件,如list, tuple, str都具有切片功能

l =

list

(range

(100))

l[:10]

#前10個數l[-

10:]#後10個數l[:

:2]#step為2

對於迭代式,可以直接將迭代物件進行篩選和操作,寫在一行表示式。

如下例,篩選出range(1,6)中的偶數,並取平方:

list1=[1

,2,3

,4,5

]list2 =

[x*x for x in list1 if x%2==

0]#注意,這裡是條件篩選,不要加else

print

(list2)

與列表生成式的區別就是和()的區別,generator採用()

列表生成式受到記憶體限制,容量有限。

如果列表元素可以按照某種演算法推算出來,那我們是否可以在迴圈的過程中不斷推算出後續的元素呢?這樣就不必建立完整的list,從而節省大量的空間。在python中,這種一邊迴圈一邊計算的機制,稱為生成器:generator。

g =

(x*x for x in

range(1

,6))

for i in g:

print

(i)

-凡是可作用於for迴圈的物件都是iterable型別;

-凡是可作用於next()函式的物件都是iterator型別,它們表示乙個惰性計算的序列;

*arg 表示傳入的引數未知數量,以tuple形式傳入

def

func1

(*arg)

:for i in arg:

print

(i)func1(1,

2,3)

*kwarg 表示傳入的引數為dict

def

func2

(*kwarg)

:for key, value in kwarg.items():

print

(str

(key)

+':'

+str

(value))

dict1 =

func2(

**dict1)

zip() 函式用於將可迭代的物件作為引數,將物件中對應索引的元素打包成乙個個元組,然後返回由這些元組組成的列表。

>>

> a =[1

,2,3

]>>

> b =[4

,5,6

]>>

> c =[4

,5,6

,7,8

]>>

> zipped =

zip(a,b)

# 打包為元組的列表[(

1,4)

,(2,

5),(

3,6)

]>>

>

zip(a,c)

# 元素個數與最短的列表一致[(

1,4)

,(2,

5),(

3,6)

]

類在例項化之後,便會自動呼叫其構造方法__init__()

例項化後的類在呼叫時,會自動呼叫其__call__()方法,

class

ob1:

def__init__

(self, name, age)

:print

('__init__ here'

) self.name = name

self.age = age

def__call__

(self)

:print

('__call__ here'

)o = ob1(

'richard',26

)# __init__ hereo()

#__cal__ here

python高階用法 Python高階用法

python高階用法 三元表示式 x 10 y 20 print x if x y else y x 100 y 20 print x if x y else y 列表推導式和生成器 列表推導式 print i for i in range 10 print i 2 for i in range 1...

python骨灰技巧 Python 高階技巧

一 生成器 通過列表生成式,我們可以直接建立乙個列表。但是,受到記憶體限制,列表容量肯定是有限的。而且,建立乙個包含100萬個元素的列表,不僅占用很大的儲存空間,如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素占用的空間都白白浪費了。這個其實是惰性求值,資料不是全部一下子載入到記憶體中,而是乙個...

python高階用法

建立dict i for i in range 10 pandas給乙個dataframe的列沒有在另乙個dataframe的列中出現的列賦值為nan df a.loc df a.isin df b col name unique col name nan pandas做笛卡爾積 df a valu...