案例詳解:filter 過濾、map 映射、reduce累積

2021-02-19 馬同學的數據筆記

filter()函數用於過濾序列

filter()把傳入的函數依次作用於每個元素,然後根據返回值是True還是False決定保留還是丟棄該元素。

filter(function, iterable)

參數:

function -- 判斷函數

iterable -- 可迭代對象

#  filter 過濾
num=[2,3,7,9,17,12,5]
filter(lambda y:y>10,num) #輸出:[17,12]

#  filter 過濾
nums = [2,3,6,12,15,18]
def nums_res (x):
  return x % 2 == 0 and x % 3 == 0
print filter(nums_res, nums)
輸出:[1, 3, 5, 7, 9]

#  filter 過濾 (只保留奇數)
def is_odd(n):
  return n % 2 == 1

filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])輸出: [1, 5, 9, 15]

map() 會根據提供的函數對指定序列做映射

map()函數接收兩個參數,一個是函數,一個是Iterable(可迭代對象),map將傳入的函數依次作用到序列的每個元素,並把結果作為新的Iterator返回。

map() 函數語法:

    map(function, iterable, ...)

參數

function -- 函數,有兩個參數

iterable -- 一個或多個序列

#map 函數
map(lambda x, y: x+y,[1,3,5,],[2,4,6])
# 結果如下:
[3,7,11,15,19]

#map 函數
map(int,'1234')

# 結果如下:
[1,2,3,4]

#map 函數
def f(x):
    return x*x
print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])

#輸出結果:
[1, 4, 9, 10, 25, 36, 49, 64, 81]

#注意:map()函數不改變原有的 list,而是返回一個新的 list。

reduce()函數在庫functools裡,如果要使用它,要從這個庫裡導入。

reduce函數與map函數有不一樣地方,map操作是並行操作,reduce函數是把多個參數合併的操作,也就是從多個條件簡化的結果,在計算機的算法裡,大多數情況下,就是為了簡單化。比如識別圖像是否是一隻貓,那麼就是從眾多的像素裡提煉出來一個判斷:是或否。可能是幾百萬個像素,就只出來一個結果。在GOOGLE大規模集群裡,就是利用這個思想,把前面並行處理的操作叫做map,並行處理之後的結果,就需要簡化,歸類,把這個簡化和歸類的過程就叫做reduce。由於reduce只能在一臺主機上操作,並不能分布式地處理,但是reduce處理的是map結果,那麼意味著這些結果已經非常簡單,數據量大大減小,處理起來就非常快。因此可以把mapreduce過程叫做分析歸納的過程。

reduce() 函數會對參數序列中元素進行累積

函數將一個數據集合(鍊表,元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(有兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。

reduce() 函數語法:

reduce(function, iterable[, initializer])

參數

function -- 函數,有兩個參數

iterable -- 可迭代對象

initializer -- 可選,初始參數

#reduce 累積
def add(x, y):
    return x+y

from functools import reduce
reduce(add, [1,2,3,4])
輸出:10

#reduce 累積
#那如果我們希望是序列的乘積呢,下面代碼的意思就是列表每個元素相乘
from functools import reduce
lst=[1,2,3,4]
print(reduce(lambda x,y: x*y, lst))

輸出:24

相關焦點

  • 詳解Python函數式編程之map、reduce、filter
    map()、reduce()、filter()是Python中很常用的幾個函數,也是Python支持函數式編程的重要體現。
  • Python 進階之術 Map Filter Reduce
    的兼容性# 在python2中map直接返回列表,但在python3中返回迭代器# 因此為了兼容python3, 需要list轉換⼀下# Output:# [0, 0]# [1, 2]# [4, 4]# [9, 6]# [16, 8]Filter顧名思義,filter過濾列表中的元素,並且返回⼀個由所有符合要求的元素所構成的列表
  • 5分鐘掌握Python | Map、Reduce和Filter如何運用?
    今天給大家介紹的是Python當中三個非常神奇的方法:map、reduce和filter。Map除了地圖之外,另一個英文本意是映射。在C++和Java一些語言當中,將map進一步引申成了存儲key和value映射結構的容器。
  • 圖解 Map、Reduce 和 Filter 數組方法
    、reduce 和 filter 是三個非常實用的 JavaScript 數組方法,賦予了開發者四兩撥千斤的能力。});一個幫助記住 map 的方法:Morph Array Piece-by-Piece(逐個改變數組)你可以使用 map 代替 for-each 循環,來遍歷並對每個值應用轉換函數。這個方法適用於當你想更新數組的同時保留原始值。它不會潛在地刪除任何值(filter 方法會),也不會計算出一個新的輸出(就像 reduce 那樣)。
  • Python專題——五分鐘帶你了解map、reduce和filter
    今天是Python專題第6篇文章,給大家介紹的是Python當中三個非常神奇的方法:map、reduce和filter。不知道大家看到map和reduce的時候有沒有什麼感覺,如果看過之前我們大數據系列介紹MapReduce文章的同學,想必有些印象。這個MapReduce不是一個分布式的計算方法麼,怎麼又變成Python中的方法了?
  • python3 map、reduce、filter 的區別
    、reduce、filter 這樣的高階函數(累計函數):對於序列內所有元素進行累計操作,這個函數必須接收兩個參數,reduce 把結果繼續和序列的下一個元素做累積計算因為在 Python3 中,已經將內置的 移除了,所以使用之前必須先導入標準庫 functools 中的 reduce
  • 【第1589期】圖解 Map、Reduce 和 Filter 數組方法
    正文從這開始~~map、reduce 和 filter 是三個非常實用的 JavaScript 數組方法,賦予了開發者四兩撥千斤的能力。我們直接進入正題,看看如何使用(並記住)這些超級好用的方法!Array.map()Array.map() 根據傳遞的轉換函數,更新給定數組中的每個值,並返回一個相同長度的新數組。
  • 如何用Map、Filter和Reduce替換Python For循環?
    回顧之前寫的代碼,我意識到當循環字符串或數組時,95%的情況下,我都在做如下的事情之一:將系列語句映射(Map)到每個值,過濾(Filter)掉滿足特定情況的值,或者將數據集減少(Reduce)到單個聚合值。
  • 從頭使用.map() .filter() 和.reduce(),你會有意想不到的收穫!
    在「碼農圈」,學習如何使用.map()、.filter()和.reduce()函數,我們讀到、看到和聽到的一切都很複雜,無法理解這些概念,因為它們是獨立的學習單元。聽說這些是意味著上升至啟蒙狀態的入門知識。
  • 「 JS-三個高階函數filter-map-reduce 」
    前言: JS-三個高階函數filter-map-reduce,需要掌握,很好用,真香警告。filterfilter 有過濾的意思filter(參數) 方法創建一個新的數組,新數組中的元素是通過檢查指定數組中符合條件的所有元素。
  • reduce()函數和filter()函數閃亮登場
    在推文《優雅的map()》中,我們向大家介紹了map()函數的使用方法。今天給大家帶來了另外兩個相當實用的Python函數——reduce()函數和filter()函數。大家想對這兩個函數有進一步了解的話,就請繼續看下去吧!一.reduce()函數  reduce()函數是用函數對參數序列中的元素進行累積。
  • Python編程技巧:如何用Map, Filter, Reduce代替For循環?
    map、filter 和 reduce 這三種技術可以提供描述迭代原因的函數替代方案,以便避免過多的 for 循環。我之前在 JavaScript 中寫過這些技術的入門文章,但是它們在 Python 中的實現略有不同。
  • python高階函數:map、filter、reduce的替代品
    在函數式編程中,大家最熟悉的高階函數主要有map函數、filter函數、reduce函數和apply函數。python3中移除了apply。如果想使用不定量的參數調用函數,可以使用fn(*args,**keywords),不用再使用apply(fn,args,keywords)。
  • 一文看懂Python列表表達式及高階函數如lamda, zip, enumerate, map和filter方法.
    其實lambda最常用的還是和sorted, map、reduce、filter這些高級函數結合使用。我們再來看下2個使用lambda函數結合sorted方法排序的經典例子。一個按絕對值大小排序,一個按字符串長度排序。
  • Java 8 Map,Filter和Collect示例
    例如,通過使用map()函數,您可以通過將Integer.valueOf()方法應用於輸入列表上的每個String,將String列錶轉換為List of Integer。您只需要一個映射函數將一個對象轉換為另一個對象,然後,map()函數將為您進行轉換。它也是一個中間Stream操作,這意味著您可以調用其他Stream方法,如過濾器,或者在此處收集以創建一系列轉換。
  • JavaScript 數組方法filter和reduce使用詳解
    前言在ES6新增的數組方法中,包含了多個遍歷方法,其中包含了用於篩選的filter和reduce
  • Python基礎應用:map與reduce
    map() 和 reduce() 都是Python內置的高階函數。所謂高階函數,即以函數作為輸入參數或輸出結果的函數,map() 和 reduce()的共同特徵是以函數作為傳入參數。以下是map()和reduce()的使用方法和例子:In [1]:# map() 最常見的用法是對列表做映射l = [ i for i in range(9)]print('l: ', l)print('\n')# 將匿名函數作為參數傳遞給map()函數# 匿名函數相關內容詳見
  • JavaScript 關於map,reduce函數的一些思考
    map函數與reduce函數屬於函數式編程,通俗點說,可以把函數作為參數或返回值自由傳遞。
  • 科學使用python中的Map函數和Filter函數
    完成此操作的另一種方法是使用內置的 python 函數 map。Map 函數接受兩個參數: 我們要應用的函數和我們要應用它的迭代對象或序列(例如本例中的列表)。換句話說,map 函數映射或應用這個函數到我們傳入的序列的每個元素。
  • 一文讀懂python的map、reduce函數
    這篇文章講的是Python的map、reduce兩大函數。