列表字典推導式

2021-10-02 01:29:32 字數 4512 閱讀 8831

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