1、pep8
規範
命名 2、深淺拷貝
3、迭代器,生成器
generator
:這種一邊迴圈一邊計算的機制,稱為生成器,生成器其實是一種特殊的迭代器,不需要自定義__iter__
和__next__
自定義乙個迭代器,實現斐波那契數列
class fib(object):
def __init__(self,max):
self.x = 0
self.y = 1
self.max = max
def __iter__(self):
return self #返回當前物件
def __next__(self):
n_next = self.y
self.x,self.y =self.y, self.x +self.y
if self.max > self.x:
return n_next
else:
raise stopiteration()
自定義乙個生成器函式,實現斐波那契數列
迭代器、生成器有什麼好處?
4、列表、字典、集合的推導
list1=[1,2,3,4,5,6]
[表示式1 if 條件 else 表示式2 for i in list1
]
[表示式 1 for x in list1 for y in list1
]
列表推導式裡面的list1
可以是 列表字典集合
字典推導式
dict1 =
new_dict =
new_dict1 =
5、高階函式
如果乙個函式的引數是另外乙個函式,那麼這個函式就可以稱為高階函式
mapmap是系統內建函式,map函式接收兩個引數,乙個是函式,乙個是可迭代物件(iterable
),map將傳入的函式依次作用到序列的每個元素,並把結果作為新的iterator返回。
"""
map(function,iterable)
引數1:function,函式,函式的引數個數取決於後面序列的個數
引數2:iterable,乙個序列或多個序列
功能:將傳入的函式依次作用於序列中的每乙個元素,並把結果作為新的iterator返回
"""#1.傳入函式乙個引數
def fun(x):
return x ** 2
#需求:獲取乙個列表中每個元素的平方,生成乙個新的列表
l1 = map(fun,[1,2,3,4])
print(l1) ##返回的是迭代器
print(list(l1)) #[1, 4, 9, 16] #將迭代器轉換為迭代物件
#傳入函式2個引數
l1 = [1,2,3,4]
l2 = [2,3,4,5,6,7]
def mul(x, y):
return x * y
#注意如果兩個列表長度不一樣,以短的為主計算,函式是平行取值,也就是說x取l1的值,y取l2的值
gen1 = map(mul,l1,l2) #可以使用lambda表示式
print(list(gen1)) #[2, 6, 12, 20]
#提取字典的鍵
gen3 = map(lambda x:int(x),)
print(list(gen3)) #[1,2]
#元組gen4 = map(lambda x,y:(x,y),[1,2,3,4,5],[1,2,3])
print(list(gen4)) #[(1, 1), (2, 2), (3, 3)]
filter
filter是內建函式,可以對可迭代物件進行過濾,去除不滿足條件的元素
filter
(function, iterable)
引數: function 確定是否保留元素,返回true
|false,為真保留,為假去除元素,function的值可以none
iterable 可迭代物件
返回值:乙個新的迭代器或迭代物件
#1 過濾掉非字串資料
print
(filter
(lambda x:
isinstance
(x,str),
['1',8
,'2',3
,true
,0.9])
) 等價於:
[s for s in
['1',8
,'2',3
,true
,0.9]if
isinstance
(s,str)]
#2 回文數
#回文數判斷
defis_palindrome
(n):
l1 =
list
(str
(n))
#將數字轉換為字串,再將字串轉為列表
l2 = l1[::
-1]#獲取反向列表
if l1 == l2:
#列表比較,長度相同,每乙個元素都相同則為真
return
true
return
false
#找出1-1000內所有的回文數
print
(list
(filter
(is_palindrome,
range(1
,1001))
))
sorted
sorted是內建函式,用於對有序序列進行排序,生成乙個新序列
sorted
(iterable[
, key]
[, reverse]
) 引數:iterable 排序物件,可以列表、元組、字串等有序序列
key 乙個函式,作用於序列的每乙個元素,根據函式返回值進行排序,
具體的函式的引數就是取自於可迭代物件中,
reverse 預設從小到大排序,如果reverse為true則從大到小排序
返回值: 新的序列
#字串排序
print
(sorted([
'bob'
,'about'
,'zoo'
,'credit'
], key=
str.lower)
)#指定把元素變為小寫後再排序
#多維資料排序l=[
('a',1
),('b',2
),('c',6
),('d',4
),('e',3
)]print
(sorted
(l,key=
lambda x:x[1]
))#使用元組的第二個元素排序
students =[,
,]print
(sorted
(students,key=
lambda elem:elem[
'age'])
)#指定用age排序
reduce
reduce()函式也是functools
模組中的乙個高階函式。需要引入functools
模組才能使用。
'''
functools.reduce(f, iterable[, initializer])
引數1:函式,這個函式需要兩個引數。
引數2:可迭代物件
引數3:可選,是預設值
返回值:f函式計算的結果
'''from functools import
reduce
#1.累加求和
deff
(x,y)
return x + y
print
(reduce
(f,[1,
2,3,
4,5]
,5))
計算過程:
(1)a = f(1,
2)#將1賦值給x,2賦值給y
(2)a = f(a,3)
#a賦值給x,3賦值給y
(3)a = f(a,4)
(4)a = f(a,5)
(5)f(d,10)
=20#將序列變成整數
print
(reduce
(lambda x,y:x*
10+y,[9
,0,7
,8])
)#9078
6、lambda
lambda是乙個匿名函式,就是沒有函式名的函式,lambda 結構比較簡單能夠支援的功能十分有限,一般在高階函式中使用較多。lambda 引數1,引數2,引數*** :返回結果
7、排列和組合
列表 字典推導式
用來快速建立列表就叫做列表推導式 方法1 列表 表示式 for x in 序列 產生乙個新的列表,變數在序列中沒取乙個元素,就將表示式的值新增到新列表中 方法二 列表 表示式 for 變數 in 序列 if 條件語句 方法三 列表 表示式 for 變數1 in 序列1 for 變數2 in 序列2 ...
列表 字典 集合推導式用法介紹
coding utf 8 file 補充.py 描述 布林值,zip 隨機數 列表 字典 集合推導式 time 2020 5 28 18 23 author 崔 versions 1.0 1 bool型 假的值有 none 0 0.0 false 所有的空容器 空列表 空元組 空字典 空集合 空字串...
15 列表字串字典轉換 推導式
1.列表轉換為字串 join函式將乙個序列連線為字串 a a b 2 b str i for i in a 列表推導式,生成乙個列表,元素是str i 即將所有元素轉化為字串 c join b join函式將乙個序列連線為字串 print c2.字串轉換為列表,列表推導式,注意以把推導式廓上 d d...