1. 程式人生 > >day 16 - 1 內建函式(二)

day 16 - 1 內建函式(二)

內建函式(二)

reversed()  返回一個反向的迭代器

k = [1,2,3,4,5]
k.reverse()  #反轉
print(k)

k = [1,2,3,4,5]
k2 = reversed(k) #反向的迭代器
print(k2)
for i in k2:
    print(i)
#返回結果 反序的迭代器 <list_reverseiterator object at 0x0000000000B8FBA8>
#保留原列表,返回一個反向的迭代器

 

slice()  切片(函式,不怎麼用)

l = (1,2,23,213,5612,342,43)
sli 
= slice(1,5,2) print(l[sli]) print(l[1:5:2])

 

format()  格式化輸出,它有很多功能

print(format('test', '<20'))    #左對齊
print(format('test', '>40'))    #右對齊
print(format('test', '^40'))    #居中

 

bytes()    轉換為 bytes 型別

# 我拿到的是gbk編碼的,我想轉成utf-8編碼
print(bytes('你好',encoding='
GBK')) # unicode 轉換成GBK的 bytes print(bytes('你好',encoding='GBK').decode('GBK')) #二進位制又轉為 GBK print(bytes('你好',encoding='utf-8')) # unicode 轉換成 utf-8 的 bytes #bytes 用途 # 網路程式設計 只能傳二進位制 # 照片和視訊也是以二進位制儲存 # html網頁爬取到的也是編碼

 

bytearray()  是一個 byte 型別的陣列

b_array = bytearray('你好',encoding='
utf-8') print(b_array) #'\xe4\xbd\xa0\xe5\xa5\xbd' print(b_array[0]) #228

 

ord()   字元按照 unicode 轉數字

print(ord(''))
print(ord('1'))

 

chr() 數字按照 unicode 轉字元

print(chr(97))

 

ascii() 只要是 ascii 碼中的內容 就打印出來,不是就轉換成 \u

print(ascii(''))
print(ascii('1'))

 

repr()  用於百分號格式化輸出

name = 'egg'
print('你好%r'%name)
print(repr('1'))  #是什麼就列印什麼
print(repr(1))

 

all() 判斷是否有 bool 值為 False 的值
返回的值有有任意一個 False 整體就為 False

print(all(['a','',123]))
print(all(['a',123]))
print(all([0,123]))

 

any() 判斷是否有 bool 值為 True 的值
返回的值有有任意一個 True 整體就為 True

print(any(['',True,0,[]]))

 

很重要的四個內建函式 zip filter map sorted

zip() 拉鍊方法 返回的是一個迭代器
木桶短板原則來拉鍊

l = [1,2,3,4,5]
l2 = ['a','b','c','d']
l3 = ('*','**',[1,2])
d = {'k1':1,'k2':2}
for i in zip(l,l2,l3,d):
    print(i)

 

filter() 過濾

filter() 函式接收一個函式 f 和一個 list,這個函式 f 的作用是對每個元素進行判斷,返回 True 或 False,filter() 根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新 list

def is_odd(x):
    return x % 2 == 1
#返回奇數
ret = filter(is_odd,[1,2,3,4,5,6,7,8,9])

#像如下的列表推導式
[i for i in [1,2,3,4,5,6,7,8,9] if x % 2 == 1] 

print(ret) #可見這裡返回的是一個迭代器

for i in ret:
    print(i)


#返回字串
def is_str(x):
    return type(x) == str

ret = filter(is_str,[1, 'hello',[],'',None,6,7,'world',12,17]) #''也屬於字串

for i in ret:
    print(i)
#利用filter(),可以完成很多有用的功能 例如:刪除 None 或者空字串(不考慮 0 的問題)
def is_not_empty(s):
    return s and len(str(s).strip()) > 0
    return s and str(s).strip()
ret = filter(is_not_empty,[1,'hello',[],'',None,6,7,'world',12,17]) 

for i in ret:
    print(i)


#請利用filter()過濾出1~100中平方根是整數的數,即結果應該是:
#[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
from math import sqrt #開平方
def sqrts(s):
    ret = sqrt(s)
    return ret % 1 == 0  #除以一餘零為整數
ret = filter(sqrts,range(1,101))
for i in ret:
    print(i)

 

map 函式應用於每一個可迭代的項,返回的是一個結果 list。如果有其他的可迭代引數傳進來,map 函式則會把每一個引數都以相應的處理函式進行迭代處理。map() 函式接收兩個引數,一個是函式,一個是序列,map 將傳入的函式依次作用到序列的每個元素,並把結果作為新的list返回

ret = map(abs,[1,-4,6,-8])
print(ret)
for i in ret:
    print(i)

 

filter 執行了 filter 之後的結果集合 <= 執行之前的個數
  filter 只管篩選,不會改變原來的值
map 執行前後元素個數不變
  值可能發生改變


sorted()  排序

sorted 使用場景:列表資料不大,且還要保留原有列表順序的時候
因為 sorted 排序不改變原有列表 所以在記憶體空間就會有兩個列表

k = [1,-4,6,5,-10]  #從小到大進行排序
k.sort(key = abs)   #sort 在原列表的基礎上進行排序
print(k)

# reverse=True 從大到小排序 reverse=False 從小到大排序(預設)
print(sorted(k,key=abs,reverse=True))  #sorted 生成了一個新列表 不改變原列表 佔記憶體
print(k)

##根據列表中每一個元素的長度進行排序
h = ['   ',[1,2],'hello world']
print(sorted(h,key=len))

 

匿名函式

 

帶有 key 的五個函式,都可以和 lambda 函式組合
 min max filter map sorted —— lambda

def add(x,y):
    return x+y
print(add(10,20))

#匿名函式組成部分(不允許換行)
#函式名 = 匿名函式關鍵字 參,數 : 返回值(函式名是匿名函式賦值後才有的)
add = lambda x,y:x+y
print(add(1,2))

#上面是匿名函式的函式用法。除此之外,匿名函式也不是浪得虛名,它真的可以匿名。在和其他功能函式合作的時候

 

取出字典中 value 最大值對應的 key 值

#用普通函式的寫法
dic={'k1':10,'k2':100,'k3':30}
def func(key):
    return dic[key]
print(max(dic,key=func))   #根據返回值判斷最大值,返回值最大的那個引數是結果

#匿名函式的寫法 一行搞定
print(max(dic,key=lambda k:dic[k]))