最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)按學(xué)生年齡排序的實(shí)際問(wèn)題詳解

 更新時(shí)間:2017年08月29日 08:28:43   作者:mingsquall  
這篇文章主要給大家介紹了關(guān)于Python實(shí)現(xiàn)按學(xué)生年齡排序?qū)嶋H問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

前言

本文主要給大家了關(guān)于利用Python按學(xué)生年齡排序的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹:

問(wèn)題:定義一個(gè)Class:包含姓名name、性別gender、年齡age,需要按年齡給學(xué)生排序。

輸入:包含學(xué)生對(duì)象的List。

輸出:按照年齡age進(jìn)行排序好的List。

思路1:使用冒泡排序,比較相鄰的學(xué)生,如果第一個(gè)學(xué)生的age值比第二個(gè)學(xué)生的age值大,那么就整體交換這兩個(gè)元素。持續(xù)每次對(duì)越來(lái)越少的元素重復(fù)上面的步驟。一直到?jīng)]有任何一對(duì)學(xué)生需要比較。

思路2:使用Python內(nèi)建方法sorted()。

(這個(gè)問(wèn)題其實(shí)是筆者面試時(shí)候手寫(xiě)的一個(gè)實(shí)際問(wèn)題,比較面向小白,我們可以通過(guò)這樣一個(gè)簡(jiǎn)單的問(wèn)題復(fù)習(xí)Python的一些基礎(chǔ)知識(shí)點(diǎn))

1. 前期準(zhǔn)備

1.1 定義Class

class Student(object):
 def __init__(self, name, gender, age):
 self.__name = name
 self.__gender = gender
 self.__age = age
 
 # 取得age屬性
 def getAge(self):
 return self.__age
 
 # 打印
 def printStudent(self):
 return self.__name, self.__gender, self.__age

1.2 生成包含隨機(jī)學(xué)生對(duì)象的List

# 生成包含隨機(jī)學(xué)生對(duì)象的list
def generateStudent(num):
 # num為需要生成的測(cè)試對(duì)象數(shù)
 list = []
 for i in range(num):
 randName = ''.join(random.sample(string.ascii_letters, 4))
 randGender = random.choice(['Male', 'FeMale'])
 randAge = random.randint(10,30)
 s = Student(randName, randGender, randAge)
 list.append(s)
 return list

2. 開(kāi)始排序

2.1 使用冒泡排序

思路已在開(kāi)頭介紹,我們直接來(lái)看代碼:

def sortStudent(list):
 for i in range(len(list)):
 for j in range(1, len(list)-i):
  if list[j-1].getAge() > list[j].getAge():
  list[j-1], list[j] = list[j], list[j-1]
 return list

2.2 使用Python內(nèi)建方法sorted

配合lambda表達(dá)式使用,非常簡(jiǎn)潔,代碼如下:

sorted(list, key=lambda student: student.getAge()) # 將對(duì)象的age屬性作為排序的Key

我們?cè)谶@里補(bǔ)充一下 sorted() 和 lambda表達(dá)式 的相關(guān)知識(shí)點(diǎn):

2.2.1 sorted(iterable, *, key=None, reverse=False)

官方文檔

關(guān)于參數(shù)的說(shuō)明:

key specifies a function of one argument that is used to extract a comparison key from each list element: key=str.lower. The default value is None (compare the elements directly).
reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed.

  • key里接收的可以是某一個(gè)指定的函數(shù)(如lambda函數(shù))返回的一個(gè)值,作為指定的比較依據(jù)。
  • reverse默認(rèn)是False從小到大排序,設(shè)置為T(mén)rue后可以從大到小。

關(guān)于穩(wěn)定性的說(shuō)明:

The built-in sorted() function is guaranteed to be stable.

(看到官方文檔的說(shuō)明中寫(xiě)道,這個(gè)方法是保證穩(wěn)定的喲!)

關(guān)于原理:Python內(nèi)置的sorted()方法背后使用的是Timsort算法,當(dāng)數(shù)據(jù)越接近Ordered Data的時(shí)候,時(shí)間復(fù)雜度越接近O(N)。在我們的這個(gè)問(wèn)題中,年齡屬性是比較符合Ordered Data的。感興趣的可以點(diǎn)擊Timsort查看更多哈!

2.2.2 lambda表達(dá)式

直接看一個(gè)簡(jiǎn)單的例子就能明白了~

>>> pairs = [('one',1),('two',2),('three',3),('five',5),('zero',0),('four',4)]
>>> sorted(pairs, key=lambda pair: pair[1]) # List中每個(gè)tuple對(duì)的排序依據(jù)是tuple中的第2個(gè)值
[('zero', 0), ('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)] 

3. 執(zhí)行測(cè)試

構(gòu)建測(cè)試用的隨機(jī)數(shù)據(jù),計(jì)算兩種方法的執(zhí)行時(shí)間進(jìn)行比較~

if __name__ == '__main__':

 # list 形式是[('hZDw', 'FeMale', 17)...]
 list = generateStudent(10000)

 # 方法1:使用冒泡排序
 start_Time1 = time.time()
 sortStudent(list)
 end_Time1 = time.time()
 # 方法1中,使用10000個(gè)測(cè)試數(shù)據(jù)的排序時(shí)間是22.243秒以上(非精確)
 print('%s cost time %s' % ('sortStudent' , end_Time1 - start_Time1))


 # 方法2:使用Python內(nèi)建的sorted方法+lambda表達(dá)式
 # 由于sorted方法背后使用的timsort方法,當(dāng)數(shù)據(jù)越接近Ordered data的時(shí)候,時(shí)間復(fù)雜度越接近O(N)。
 # 在這個(gè)例子里面,年齡屬性是比較接近Ordered data的。
 start_Time2 = time.time()
 sorted(list, key=lambda student: student.getAge()) # 將對(duì)象的屬性作為排序的Key
 end_Time2 = time.time()
 print('%s cost time %s' % ('sorted' , end_Time2 - start_Time2))

測(cè)試結(jié)果:

使用方法1(冒泡排序),當(dāng)測(cè)試數(shù)據(jù)量是10000個(gè)的時(shí)候,排序時(shí)間是22.243秒左右。

使用方法2(內(nèi)建方法),當(dāng)測(cè)試數(shù)據(jù)量是1000000個(gè)的時(shí)候,排序時(shí)間的0.575秒左右。

雖然不是很精確,但差別顯然可見(jiàn)啦!

以上。

如有錯(cuò)誤,還望指正~

完整實(shí)現(xiàn)及測(cè)試可在Github找到:ActualProblem-Solution

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Python實(shí)現(xiàn)將doc轉(zhuǎn)化pdf格式文檔的方法

    Python實(shí)現(xiàn)將doc轉(zhuǎn)化pdf格式文檔的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)將doc轉(zhuǎn)化pdf格式文檔的方法,結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)doc格式文件讀取及轉(zhuǎn)換pdf格式文件的操作技巧,以及php調(diào)用py文件的具體實(shí)現(xiàn)方法,需要的朋友可以參考下
    2018-01-01
  • python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類

    python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類

    這篇文章主要介紹了python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類,幫助大家更好的利用python進(jìn)行深度學(xué)習(xí),感興趣的朋友可以了解下
    2021-05-05
  • Python輸出由1,2,3,4組成的互不相同且無(wú)重復(fù)的三位數(shù)

    Python輸出由1,2,3,4組成的互不相同且無(wú)重復(fù)的三位數(shù)

    這篇文章主要介紹了Python輸出由1,2,3,4組成的互不相同且無(wú)重復(fù)的三位數(shù),分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Python使用Selenium進(jìn)行Web自動(dòng)化測(cè)試

    Python使用Selenium進(jìn)行Web自動(dòng)化測(cè)試

    Selenium 是一個(gè)用于 Web 應(yīng)用自動(dòng)化測(cè)試的強(qiáng)大工具,可以用來(lái)模擬用戶操作瀏覽器,從而測(cè)試 Web 應(yīng)用的功能,它支持多種瀏覽器和編程語(yǔ)言,包括 Python,下面我們將介紹如何使用 Selenium 進(jìn)行 Web 自動(dòng)化測(cè)試,需要的朋友可以參考下
    2024-08-08
  • pycharm配置anaconda環(huán)境時(shí)找不到python.exe的兩種解決辦法

    pycharm配置anaconda環(huán)境時(shí)找不到python.exe的兩種解決辦法

    如果你在Anaconda中創(chuàng)建了虛擬環(huán)境,但是無(wú)法找到python.exe,可能是因?yàn)樘摂M環(huán)境的Python路徑?jīng)]有添加到系統(tǒng)環(huán)境變量中,這篇文章主要給大家介紹了關(guān)于pycharm配置anaconda環(huán)境時(shí)找不到python.exe的兩種解決辦法,需要的朋友可以參考下
    2024-07-07
  • 用Python實(shí)現(xiàn)批量生成法務(wù)函代碼

    用Python實(shí)現(xiàn)批量生成法務(wù)函代碼

    大家好,本篇文章主要講的是用Python實(shí)現(xiàn)批量生成法務(wù)函代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • Python3.7 + Yolo3實(shí)現(xiàn)識(shí)別語(yǔ)音播報(bào)功能

    Python3.7 + Yolo3實(shí)現(xiàn)識(shí)別語(yǔ)音播報(bào)功能

    這篇文章主要介紹了Python3.7 + Yolo3識(shí)別語(yǔ)音播報(bào)功能,開(kāi)始之前我們先得解析出來(lái)Yolo3的代碼,從而獲取到被識(shí)別出來(lái)的物體標(biāo)簽,具體詳細(xì)過(guò)程跟隨小編一起看看吧
    2021-12-12
  • OpenCV實(shí)現(xiàn)從灰度圖像切出Mask前景區(qū)域

    OpenCV實(shí)現(xiàn)從灰度圖像切出Mask前景區(qū)域

    本文主要介紹了如何利用OpenCV實(shí)現(xiàn)從灰度圖像,根據(jù)閾值,切出多個(gè)前景區(qū)域,過(guò)濾面積太小的圖像。文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-06-06
  • 淺析python redis的連接及相關(guān)操作

    淺析python redis的連接及相關(guān)操作

    Redis是一個(gè)開(kāi)源的使用ANSIC語(yǔ)言編寫(xiě)、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。這篇文章主要介紹了python redis的連接及相關(guān)操作,需要的朋友可以參考下
    2019-11-11
  • Python字典生成式、集合生成式、生成器用法實(shí)例分析

    Python字典生成式、集合生成式、生成器用法實(shí)例分析

    這篇文章主要介紹了Python字典生成式、集合生成式、生成器用法,結(jié)合實(shí)例形式分析了Python字典生成式、集合生成式、生成器相關(guān)原理、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2020-01-01

最新評(píng)論

那坡县| 马边| 利津县| 阿瓦提县| 苏尼特右旗| 大港区| 扶余县| 昆山市| 烟台市| 汉沽区| 大渡口区| 旬邑县| 都匀市| 丹江口市| 崇仁县| 朝阳区| 施秉县| 连江县| 锡林浩特市| 兰西县| 曲松县| 杭州市| 阿勒泰市| 蒙城县| 尉犁县| 黄冈市| 营口市| 南川市| 碌曲县| 天台县| 理塘县| 长治市| 顺昌县| 桐柏县| 宜君县| 济阳县| 嘉义县| 诏安县| 三门县| 肥西县| 东乌珠穆沁旗|