在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python中map函數的解釋及可視化

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-10 19:44 ? 次閱讀

先重溫一下迭代(Iteration)、迭代器對象(iterable)、迭代器(iterator )的概念:

Iteration是計算機科學的通用術語,它是指對一組元素執行一項操作,一次執行一個元素。一個很好的例子是循環 - 它適用于每個單獨的項目,直到整個項目集運行完畢為止。

Iterable是可以遍歷的對象(譯者注:在Python中所有東西都是object, 比如說變量,容器,類),iterable是可以產生iterator的object。

iterator是表示數據流的對象,它一次返回一個元素的數據。它還會記住其在迭代過程中的位置。本質上,它控制應如何迭代可迭代對象。

map()的用法

map()函數以迭代的方式將提供的功能應用于每個項目,結果是作為迭代器的map對象。語法:

map(func, *iterables)

如果沒有map(),我們將不得不編寫復雜的代碼以在多個項目上“循環”給定的函數。以一個整潔的小實驗為例:我們有一個10個單詞的列表。

test_list = ["effort", "circle", "yearly", "woolen", "accept", "lurker",
            "island", "faucet", "glossy", "evader"]

我們懷疑其中一些可能是abcderian(按字母順序出現的)。我們編寫一個函數is_abecedarian來檢查給定的單詞是否為abcderian:

def is_abecedarian(input_word):
    index = 0
    for letter in input_word[0:-1]:
        if ord(input_word[index]) > ord(input_word[index + 1]):
            return False
        else:
            index += 1
    return True

現在,我們想將函數應用于單詞列表,并創建一個將包含True和False值的新列表,以表明某些單詞是否確實是abcderian。

下面方法涉及初始化一個新列表,然后使用for循環遍歷列表元素:

value_list = []
for item in test_list:
    value = is_abecedarian(item)
    value_list.append(value)

輸出:

[True, False, False, False, True, False, False, False, True, False]

如果用map(),我們可以將上面的代碼簡化為一個簡潔的小代碼:

map(is_abecedarian, test_list)

請注意map()不會返回列表,而是返回一個map對象。

譯者注:map()函數在python2中返回的是列表。

你可能很好奇哪個詞實際上是abcderian的字母-讓我們編寫這個問題的答案:

for item in test_list:
    if is_abecedarian(item):
        print(f"The word '{item}' is abecedarian. :)")
    else:
        print(f"The word '{item}' is not abecedarian. (")

輸出:

The word 'effort' is abecedarian. :)
The word 'circle' is not abecedarian.
The word 'yearly' is not abecedarian.
The word 'woolen' is not abecedarian.
The word 'accept' is abecedarian. :)
The word 'lurker' is not abecedarian.
The word 'island' is not abecedarian.
The word 'faucet' is not abecedarian.
The word 'glossy' is abecedarian. :)
The word 'evader' is not abecedarian.

映射操作(map):一種遍歷一個序列并對每個元素執行操作的處理模式。

映射(mapping):一個集合中的每個元素對應另一個集合中的一個元素的關系

將map()轉換為列表,元組和集合

由于map()不返回列表/元組/集合,因此我們需要采取額外的步驟來轉換生成的map對象:

def capitalize_word(input_word):
    return input_word.capitalize()


map_object = map(capitalize_word, ['strength', 'agility', 'intelligence'])
test_list = list(map_object)
print(test_list)

map_object = map(capitalize_word, ['health', 'mana', 'gold'])
test_set = set(map_object)
print(test_set)

map_object = map(capitalize_word, ['armor', 'weapon', 'spell'])
test_tuple = tuple(map_object)
print(test_tuple)

輸出:

['Strength', 'Agility', 'Intelligence']
{'Mana', 'Health', 'Gold'}
('Armor', 'Weapon', 'Spell')

將map()與Lambda表達式結合

Lambda表達式是對我們的工具庫的一個很好的補充:將Lambda表達式與map()代碼相結合可使您的Python程序更小,更精確。

Lambda表達式可以創建匿名函數,即未約定特定標識符的函數。相反,通過def關鍵字創建函數會將函數綁定到其唯一標識符(例如def my_function創建標識符my_function)。

但是,lambda表達式也有一系列限制:它們每個只能做一件事情,只能在一個地方使用,通常與其他功能結合使用。我們看看lambda表達式如何map()同時使用:

cities = ["caracas", "bern", "oslo", "ottawa", "bangkok"]


def capitalize_word(input_word):
    return input_word.capitalize()


capitalized_cities = map(capitalize_word, cities)

更簡潔的版本:

cities = ["caracas", "bern", "oslo", "ottawa", "bangkok"]

capitalized_cities = map(lambda s: s.capitalize(), cities)

需要注意:map()和lambda表達式提供了凝聚多行代碼成一行的能力。
盡管此功能非常出色,但我們需要牢記編程的黃金法則之一:代碼讀取比寫入更頻繁。這意味著map()和lambda表達式都可以提高代碼的簡潔性,但是卻犧牲了代碼的清晰度。遺憾的是,對于代碼的可讀性,實際上并沒有明確的指導方針- 隨著編程經驗的增長,大家將逐漸明白這一點。

使用map()遍歷字典

map()也非常適合遍歷字典

假設有一個包含蘋果,梨和櫻桃價格的字典,我們需要通過應用15%的折扣來更新價格表。方法如下:

price_list = {
    "pear": 0.60,
    "cherries": 0.90,
    "apple": 0.35,
}


def calulates_discount(item_price):
    return (item_price[0], round(item_price[1] * 0.85, 2))


new_price_list = dict(map(calulates_discount, price_list.items()))

輸出:

{'pear': 0.51, 'cherries': 0.77, 'apple': 0.3}

將map()與Lambda表達式組合遍歷字典

當開始組合多個功能時,編程特別有趣,一個很好的例子是map()配合使用和lambda表達式來遍歷字典。在下面的代碼中,我們初始化字典列表,并將每個字典作為參數傳遞給lambda函數。

list_of_ds = [{'user': 'Jane', 'posts': 18}, {'user': 'Amina', 'posts': 64}]

map(lambda x: x['user'], list_of_ds)  # Output: ['Jane', 'Amina']

map(lambda x: x['posts'] * 10, list_of_ds)  # Output: [180, 640]

map(lambda x: x['user'] == "Jane", list_of_ds)  # Output: [True, False]

map()替代方法:列表解析

像所有技術/產品/方法等等一樣,一些Python開發人員認為map()函數在某種程度上不是Python風格(即未遵循應如何構建Python程序的精神和設計理念)。他們建議改用列表解析,比如:

map(f, iterable)

變成

[f(x) for x in iterable]

在速度和性能方面,map()與列表理析大致相等,因此不可能看到執行時間顯著減少 - 經驗豐富的Python開發者Wesley Chun在其演講Python 103:Memory Model&Best Practices中解決了這個問題,有興趣的同學可移步:
https://conferences.oreilly.c...

By Denis Kryukov

https://blog.soshace.com/pyth...

本文由博客一文多發平臺 OpenWrite 發布!

審核編輯 黃昊宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 機器學習
    +關注

    關注

    66

    文章

    8428

    瀏覽量

    132845
  • python
    +關注

    關注

    56

    文章

    4801

    瀏覽量

    84879
  • 深度學習
    +關注

    關注

    73

    文章

    5510

    瀏覽量

    121345
收藏 人收藏

    評論

    相關推薦

    數據可視化Python-matplotlib概述

    數據可視化(二):Python-matplotlib
    發表于 07-22 14:58

    如何把AD中非可視化區域物件移到可視化區域?

    AD中非可視化區域物件怎么移到可視化區域???
    發表于 09-10 05:36

    python數據可視化的方法和代碼

    Python數據可視化匯總
    發表于 10-14 14:59

    Python數據可視化專家的七個秘密

    分享 Python數據可視化專家的七個秘密
    發表于 05-15 06:43

    python數據可視化之畫折線圖

    python數據可視化之畫折線圖,散點圖
    發表于 05-27 08:09

    Python數據可視化

    Python數據可視化:網易云音樂歌單
    發表于 07-19 08:30

    三維可視化的應用和優勢

    ,為此三維可視化運維系統登場了。  三維可視化的應用  宏觀場景可視化:在特定的環境對隨著時間推移而不斷變化的目標實體進行檢測,可以直觀、靈活、逼真的展示所處區域的情景和環境,可以快
    發表于 12-02 11:52

    函數可視化與Matlab作

    函數可視化與Matlab作2.1 實驗與觀察:函數可視化2.1.1 Matlab二維繪圖命令1.周期函數與線性p-周期
    發表于 10-17 00:30 ?2233次閱讀
    <b class='flag-5'>函數</b>的<b class='flag-5'>可視化</b>與Matlab作

    可視化技術有哪些

    完整的地理空間信息可視化概念主要包括科學計算可視化、數據可視化和信息可視化可視化技術作為解釋
    發表于 02-05 09:09 ?3767次閱讀

    Python拉勾網數據采集與可視化

    本文是先采集拉勾網上面的數據,采集的是Python崗位的數據,然后用Python進行可視化。主要涉及的是爬蟲&數據可視化的知識。
    的頭像 發表于 03-13 14:18 ?3277次閱讀
    <b class='flag-5'>Python</b>拉勾網數據采集與<b class='flag-5'>可視化</b>

    使用Python可視化數據,機器人開發編程

    機器學習開發,與Mail.Ru Search數據分析負責人Egor Polusmak和Mail.Ru Group數據科學家Yury Kashnitsky一起探索如何使用Python可視化數據。在機器學習領域中,可視化并不僅僅用來
    的頭像 發表于 03-15 16:56 ?9030次閱讀

    Python數據可視化編程實戰

    Python數據可視化編程實戰資料免費下載。
    發表于 06-01 14:37 ?29次下載

    使用arduino和python可視化你的比特幣收益和損失

    電子發燒友網站提供《使用arduino和python可視化你的比特幣收益和損失.zip》資料免費下載
    發表于 12-21 16:50 ?0次下載
    使用arduino和<b class='flag-5'>python</b><b class='flag-5'>可視化</b>你的比特幣收益和損失

    使用Python來收集、處理和可視化人口數據

    如何使用Python這一流行的編程語言來收集、處理和可視化印度和中國的人口數據呢?本文將向你介紹一些基本的步驟和技巧,幫助你掌握Python進行可視化分析的方法。我們將使用以下幾個庫來
    的頭像 發表于 06-21 17:08 ?1437次閱讀
    使用<b class='flag-5'>Python</b>來收集、處理和<b class='flag-5'>可視化</b>人口數據

    Python 可視化如何配色

    我們在利用Python進行數據可視化時,有著大量的高質量庫可以用,比如: Matplotlib 、 seaborn 、 Plotly 、 Bokeh 、 ggplot 等等。但圖表好不好看,配色占
    的頭像 發表于 10-30 15:43 ?541次閱讀
    <b class='flag-5'>Python</b> <b class='flag-5'>可視化</b>如何配色
    主站蜘蛛池模板: 国产亚洲综合精品一区二区三区| 午夜毛片不卡高清免费| baoyu污污网站入口免费| 成人午夜精品久久久久久久小说| 国产精品推荐天天看天天爽| 亚洲热热久久九九精品| 久久好色| 国产区一区二区三区| 欧美四级在线| 婷婷色香| 美女下面小内内的沟| 日韩亚洲人成在线综合日本| 我被黑人巨大开嫩苞在线观看 | 香蕉狠狠再啪线视频| 男男扒开后菊惩罚| 淫性视频| 日韩欧美视频一区| 五月婷六月丁香| 色综合九九| 性福利视频| 日本亚洲成人| 四虎4hu永久免费国产精品| 日韩精品免费一区二区三区| 开心六月婷婷| 免费看一毛一级毛片视频| 日本成人一级片| 四虎国产精品视频免费看| 欧美成人久久| 欧美xxxxx喷潮| 国产裸露片段精华合集链接| 天天曰天天干天天操| 国产真实乱在线更新| 国产免费高清视频在线观看不卡 | 天天干精品| 天堂中文最新版www| 99国产福利| 男人日女人的网站| 全是肉的高h短篇列车| 午夜综合| 激情综合网五月激情| 国产青草|