容器函數(shù)python,算法 容器

Python 函數(shù)進(jìn)階-高階函數(shù)

高階函數(shù)就是能夠把函數(shù)當(dāng)成參數(shù)傳遞的函數(shù)就是高階函數(shù),換句話說如果一個函數(shù)的參數(shù)是函數(shù),那么這個函數(shù)就是一個高階函數(shù)。

目前成都創(chuàng)新互聯(lián)公司已為成百上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管運營、企業(yè)網(wǎng)站設(shè)計、長島網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

高階函數(shù)可以是你使用 def 關(guān)鍵字自定義的函數(shù),也有Python系統(tǒng)自帶的內(nèi)置高階函數(shù)。

我們下面的例子中,函數(shù) senior 的參數(shù)中有一個是函數(shù),那么senior就是一個高階函數(shù);函數(shù) tenfold 的參數(shù)不是函數(shù),所以tenfold就只是一個普通的函數(shù)。

function:函數(shù),可以是 自定義函數(shù) 或者是 內(nèi)置函數(shù);

iterable:可迭代對象,可迭代性數(shù)據(jù)。(容器類型數(shù)據(jù)和類容器類型數(shù)據(jù)、range對象、迭代器)

把可迭代對象中的數(shù)據(jù)一個一個拿出來,然后放在到指定的函數(shù)中做處理,將處理之后的結(jié)果依次放入迭代器中,最后返回這個迭代器。

將列表中的元素轉(zhuǎn)成整型類型,然后返回出來。

列表中的每一個數(shù)依次乘 2的下標(biāo)索引+1 次方。使用自定義的函數(shù),配合實現(xiàn)功能。

參數(shù)的意義和map函數(shù)一樣

filter用于過濾數(shù)據(jù),將可迭代對象中的數(shù)據(jù)一個一個的放入函數(shù)中進(jìn)行處理,如果函數(shù)返回值為真,將數(shù)據(jù)保留;反之不保留,最好返回迭代器。

保留容器中的偶數(shù)

參數(shù)含義與map、filter一致。

計算數(shù)據(jù),將可迭代對象的中的前兩個值放在函數(shù)中做出運算,得出結(jié)果在和第三個值放在函數(shù)中運算得出結(jié)果,以此類推,直到所有的結(jié)果運算完畢,返回最終的結(jié)果。

根據(jù)功能我們就應(yīng)該直到,reduce中的函數(shù)需要可以接收兩個參數(shù)才可以。

將列表中的數(shù)據(jù)元素組合成為一個數(shù),

iterable:可迭代對象;

key:指定函數(shù),默認(rèn)為空;

reverse:排序的方法,默認(rèn)為False,意為升序;

如果沒有指定函數(shù),就單純的將數(shù)據(jù)安札ASCII進(jìn)行排序;如果指定了函數(shù),就將數(shù)據(jù)放入函數(shù)中進(jìn)行運算,根據(jù)數(shù)據(jù)的結(jié)果進(jìn)行排序,返回新的數(shù)據(jù),不會改變原有的數(shù)據(jù)。

注意,如果指定了函數(shù),排序之后是根據(jù)數(shù)據(jù)的結(jié)果對原數(shù)據(jù)進(jìn)行排序,而不是排序計算之后的就結(jié)果數(shù)據(jù)。

將列表中的數(shù)據(jù)進(jìn)行排序。

還有一點就是 sorted 函數(shù)可以將數(shù)據(jù)放入函數(shù)中進(jìn)行處理,然后根據(jù)結(jié)果進(jìn)行排序。

既然有了列表的內(nèi)置函數(shù)sort,為什么我們還要使用sorted函數(shù)呢?

高階函數(shù)就是將函數(shù)作為參數(shù)的函數(shù)。

文章來自

什么是python內(nèi)置函數(shù)sorted

Python對容器內(nèi)數(shù)據(jù)的排序有兩種,一種是容器自己的sort函數(shù),一種是內(nèi)建的sorted函數(shù)。

sort函數(shù)和sorted函數(shù)唯一的不同是,sort是在容器內(nèi)排序,sorted生成一個新的排好序的容器。

對于一個簡單的數(shù)組 L=[5,2,3,1,4].

sort: L.sort()

sorted(...)

sorted(iterable, cmp=None, key=None, reverse=False) -- new sorted list

iterable:待排序的可迭代類型的容器;

cmp:用于比較的函數(shù),比較什么由key決定,有默認(rèn)值,迭代集合中的一項;

key:用列表元素的某個已命名的屬性或函數(shù)(只有一個參數(shù)并且返回一個用于排序的值)作為關(guān)鍵字,有默認(rèn)值,迭代集合中的一項;

reverse:排序規(guī)則. reverse = True 或者 reverse = False,有默認(rèn)值。

返回值:是一個經(jīng)過排序的可迭代類型,與iterable一樣。

如果是一個多維的列表 L=[(‘b’,2),(‘a(chǎn)’,1),(‘c’,3),(‘d’,4)].

有三種選擇對這個多維列表進(jìn)行排序

利用cmp函數(shù)

sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))

L.sort(cmp=lambda x,y:cmp(x[1],y[1]))

利用key

sorted(L, key=lambda x:x[1]);

L.sort(key=lambda x:x[1]);

反序

以上幾種排序均可加上參數(shù)reverse.

例如 sorted(reverse=True), L.sort(reverse=True). 或者改成False

OrderedDict是collections中的一個包,能夠記錄字典元素插入的順序,常常和排序函數(shù)一起使用來生成一個排序的字典。

比如,比如一個無序的字典

d = {‘banana’:3,’apple’:4,’pear’:1,’orange’:2}

通過排序來生成一個有序的字典,有以下幾種方式

collections.OrderedDict(sorted(d.items(),key = lambda t:t[0]))

或者

collections.OrderedDict(sorted(d.items(),key = lambda t:t[1]))

或者

collections.OrderedDict(sorted(d.items(),key = lambda t:len(t[0])))

Python中冷門但非常好用的內(nèi)置函數(shù)

Python中有許多內(nèi)置函數(shù),不像print、len那么廣為人知,但它們的功能卻異常強大,用好了可以大大提高代碼效率,同時提升代碼的簡潔度,增強可閱讀性

Counter

collections在python官方文檔中的解釋是High-performance container datatypes,直接的中文翻譯解釋高性能容量數(shù)據(jù)類型。這個模塊實現(xiàn)了特定目標(biāo)的容器,以提供Python標(biāo)準(zhǔn)內(nèi)建容器 dict , list , set , 和 tuple 的替代選擇。在python3.10.1中它總共包含以下幾種數(shù)據(jù)類型:

容器名簡介

namedtuple() 創(chuàng)建命名元組子類的工廠函數(shù)

deque 類似列表(list)的容器,實現(xiàn)了在兩端快速添加(append)和彈出(pop)

ChainMap 類似字典(dict)的容器類,將多個映射集合到一個視圖里面

Counter 字典的子類,提供了可哈希對象的計數(shù)功能

OrderedDict 字典的子類,保存了他們被添加的順序

defaultdict 字典的子類,提供了一個工廠函數(shù),為字典查詢提供一個默認(rèn)值

UserDict 封裝了字典對象,簡化了字典子類化

UserList 封裝了列表對象,簡化了列表子類化

UserString 封裝了字符串對象,簡化了字符串子類化

其中Counter中文意思是計數(shù)器,也就是我們常用于統(tǒng)計的一種數(shù)據(jù)類型,在使用Counter之后可以讓我們的代碼更加簡單易讀。Counter類繼承dict類,所以它能使用dict類里面的方法

舉例

#統(tǒng)計詞頻

fruits = ['apple', 'peach', 'apple', 'lemon', 'peach', 'peach']

result = {}

for fruit in fruits:

if not result.get(fruit):

result[fruit] = 1

else:

result[fruit] += 1

print(result)

#{'apple': 2, 'peach': 3, 'lemon': 1}下面我們看用Counter怎么實現(xiàn):

from collections import Counter

fruits = ['apple', 'peach', 'apple', 'lemon', 'peach', 'peach']

c = Counter(fruits)

print(dict(c))

#{'apple': 2, 'peach': 3, 'lemon': 1}顯然代碼更加簡單了,也更容易閱讀和維護了。

elements()

返回一個迭代器,其中每個元素將重復(fù)出現(xiàn)計數(shù)值所指定次。元素會按首次出現(xiàn)的順序返回。如果一個元素的計數(shù)值小于1,elements()將會忽略它。

c = Counter(a=4, b=2, c=0, d=-2)

sorted(c.elements())

['a', 'a', 'a', 'a', 'b', 'b']most_common([n])

返回一個列表,其中包含n個最常見的元素及出現(xiàn)次數(shù),按常見程度由高到低排序。如果n被省略或為None,most_common()將返回計數(shù)器中的所有元素。計數(shù)值相等的元素按首次出現(xiàn)的順序排序:

Counter('abracadabra').most_common(3)

[('a', 5), ('b', 2), ('r', 2)]這兩個方法是Counter中最常用的方法,其他方法可以參考 python3.10.1官方文檔

實戰(zhàn)

Leetcode 1002.查找共用字符

給你一個字符串?dāng)?shù)組words,請你找出所有在words的每個字符串中都出現(xiàn)的共用字符(包括重復(fù)字符),并以數(shù)組形式返回。你可以按任意順序返回答案。

輸入:words = ["bella", "label", "roller"]

輸出:["e", "l", "l"]

輸入:words = ["cool", "lock", "cook"]

輸出:["c", "o"]看到統(tǒng)計字符,典型的可以用Counter完美解決。這道題是找出字符串列表里面每個元素都包含的字符,首先可以用Counter計算出每個元素每個字符出現(xiàn)的次數(shù),依次取交集最后得出所有元素共同存在的字符,然后利用elements輸出共用字符出現(xiàn)的次數(shù)

class Solution:

def commonChars(self, words: List[str]) - List[str]:

from collections import Counter

ans = Counter(words[0])

for i in words[1:]:

ans = Counter(i)

return list(ans.elements())提交一下,發(fā)現(xiàn)83個測試用例耗時48ms,速度還是不錯的

sorted

在處理數(shù)據(jù)過程中,我們經(jīng)常會用到排序操作,比如將列表、字典、元組里面的元素正/倒排序。這時候就需要用到sorted(),它可以對任何可迭代對象進(jìn)行排序,并返回列表

對列表升序操作:

a = sorted([2, 4, 3, 7, 1, 9])

print(a)

# 輸出:[1, 2, 3, 4, 7, 9]對元組倒序操作:

sorted((4,1,9,6),reverse=True)

print(a)

# 輸出:[9, 6, 4, 1]使用參數(shù):key,根據(jù)自定義規(guī)則,按字符串長度來排序:

fruits = ['apple', 'watermelon', 'pear', 'banana']

a = sorted(fruits, key = lambda x : len(x))

print(a)

# 輸出:['pear', 'apple', 'banana', 'watermelon']all

all() 函數(shù)用于判斷給定的可迭代參數(shù)iterable中的所有元素是否都為 TRUE,如果是返回 True,否則返回 False。元素除了是 0、空、None、False外都算True。注意:空元組、空列表返回值為True。

all(['a', 'b', 'c', 'd']) # 列表list,元素都不為空或0

True

all(['a', 'b', '', 'd']) # 列表list,存在一個為空的元素

False

all([0, 1,2, 3]) # 列表list,存在一個為0的元素

False

all(('a', 'b', 'c', 'd')) # 元組tuple,元素都不為空或0

True

all(('a', 'b', '', 'd')) # 元組tuple,存在一個為空的元素

False

all((0, 1, 2, 3)) # 元組tuple,存在一個為0的元素

False

all([]) # 空列表

True

all(()) # 空元組

Trueany函數(shù)正好和all函數(shù)相反:判斷一個tuple或者list是否全為空,0,F(xiàn)alse。如果全為空,0,F(xiàn)alse,則返回False;如果不全為空,則返回True。

F-strings

在python3.6.2版本中,PEP 498提出一種新型字符串格式化機制,被稱為 “字符串插值” 或者更常見的一種稱呼是F-strings,F(xiàn)-strings提供了一種明確且方便的方式將python表達(dá)式嵌入到字符串中來進(jìn)行格式化:

s1='Hello'

s2='World'

print(f'{s1} {s2}!')

# Hello World!在F-strings中我們也可以執(zhí)行函數(shù):

def power(x):

return x*x

x=4

print(f'{x} * {x} = {power(x)}')

# 4 * 4 = 16而且F-strings的運行速度很快,比傳統(tǒng)的%-string和str.format()這兩種格式化方法都快得多,書寫起來也更加簡單。

本文主要講解了python幾種冷門但好用的函數(shù),更多內(nèi)容以后會陸陸續(xù)續(xù)更新~

len函數(shù)python用法

len函數(shù)python用法如下:

操作設(shè)備:戴爾筆記本電腦

操作系統(tǒng):win10

操作程序:python2017

1、len函數(shù)的作用就是返回容器中項目的數(shù)目。

2、len的變量必須是容器,單獨的數(shù)字行不通:a=2,print(len(a))。

3、容器可以是列表:a=[],print(len(a))。

4、容器可以是嵌套列表:a=[[],1,2,3,[1,2,3]],print(len(a))。

5、容器可以是字符串。

6、字符串的長度與字符有關(guān):a='abcdefg369,print(len(a))。

7、反斜杠組合而成的轉(zhuǎn)移符,只是一個字符:a='\n\t',print(len(a)),這里要特別注意,\n是一個字符。

如何理解Python中的容器對象

在某些對象中會包含對其它對象的引用,這樣的對象被稱作 容器 ( containers )。因此,我們可以把容器視作用于組織各種元素的數(shù)據(jù)結(jié)構(gòu)。

下面是一些常見的容器對象:

另外,容器是存儲在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu),并且通常會將全部的值都保存在內(nèi)存中(也有一些特例,并不是所有的元素都放在內(nèi)存,比如迭代器和生成器對象)。

在某些對象中會包含對其它對象的引用,這樣的對象被稱作容器(containers)。元組、列表、字典都屬于容器。部分容器值可能是指向其它對象的引用。在大多數(shù)情況下,當(dāng)談到某個容器的值時,我們談?wù)摰膬H是值,而不是所包含的對象的 ID(identities);但是,在討論容器的可變性時,則只是在談?wù)撊萜髦兄苯影膶ο蟮?ID。因此,如果不可變?nèi)萜?比如,元組)中包含了對可變對象的引用,那么當(dāng)被引用的可變對象發(fā)生改變時,相應(yīng)的容器值也將發(fā)生改變。

從技術(shù)角度來說,容器是實現(xiàn)了 __contains__ 方法的對象,也就是說容器對象肯定可以執(zhí)行成員測試。

注意:盡管絕大多數(shù)容器都提供了某種方式來獲取其中包含的每一個元素,但這并不是容器本身提供的能力,而是 iterable 賦予了容器這種能力。容器并不一定都是 iterable,比如: Bloom filter ,雖然 Bloom filter 可以檢測某個元素是否存在于容器中,但是并不能從容器中獲取其中的每一個值,因為 Bloom filter 并沒有把元素存儲在容器中,而是通過一個散列函數(shù)映射成一個值保存在數(shù)組中。

python語言基礎(chǔ)知識是什么?

如下:

一、Python語言基礎(chǔ)

Python核心:Python數(shù)據(jù)基本運算、語句、容器、函數(shù)

Python 面向?qū)ο缶幊蹋篛OA、OOD、OOP、天龍八部技能系統(tǒng)框架 設(shè)計 Python高級:模塊、包、函數(shù)式編程、文件。

二、Python高級軟件開發(fā)技術(shù)

Linux操作系統(tǒng) :Linux常用命令、編輯工具、vim/Pycharm

數(shù)據(jù)結(jié)構(gòu)與算法 :鏈表、棧和隊列、樹和二叉樹、查找排序

IO網(wǎng)絡(luò)編程:文件操作、字節(jié)流讀寫、網(wǎng)絡(luò)協(xié)議、套接 字、TCP/UDP

并發(fā)編程:多進(jìn)程、進(jìn)程池、進(jìn)程通信、多線程、線程鎖、多任務(wù)并發(fā)、IO模型、協(xié)程

Python 正則表達(dá)式:正則表達(dá)式、貪婪模和非貪婪模式、re模塊

MySQL基礎(chǔ):數(shù)據(jù)庫應(yīng)用、SQL語言、Mysql增刪改查、 pymysql模塊

三、Python Web全棧式工程師

HTML/CSS HTML5標(biāo)簽,CSS選擇器,CSS樣式屬性以 及值

Java :JS流程控制,DOM,BOM,JQuery API

MySQL高級:MySQL索引、事務(wù)、引擎、優(yōu)化、pymysql 模塊使用

Python Django 框架:Django、模板、視圖、模型、請求對象等

 Ajax Ajax,:JSON, Jquery對Ajax的支持, 跨域訪問

四、Python 爬蟲

Redis:Redis、string、hash、list、set、zset、 Python與MySQL和Redis結(jié)合

爬蟲、HTTP、BeautifulSoup,XPath,Scrapy其實無論是學(xué)習(xí)什么知識,都要有一個對學(xué)習(xí)目標(biāo)的清楚認(rèn)識。 只有這樣才能朝著目標(biāo)持續(xù)前進(jìn),少走彎路,從學(xué)習(xí)中得到不斷的提升,享受python學(xué)習(xí)計劃的過程。

當(dāng)前題目:容器函數(shù)python,算法 容器
標(biāo)題鏈接:http://muchs.cn/article46/hssdeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站企業(yè)建站、網(wǎng)站營銷App開發(fā)品牌網(wǎng)站制作、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)