在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...