华南俳烁实业有限公司

python

當前位置:中華考試網(wǎng) >> python >> python教程 >> 文章內(nèi)容

filter使用python3代碼進行迭代元素很難嗎?

來源:中華考試網(wǎng)  [2020年12月3日]  【

  我們通常說使用函數(shù)對列表進行篩選,有多少小伙伴能夠理解篩選的原理呢?今天小編為大家?guī)砹诵屡笥裦ilter函數(shù),相較于以往能實現(xiàn)篩選功能的函數(shù)來說是復雜的,這也算是對于一些有難度函數(shù)學習的考驗。我們會著重于探討filter函數(shù)篩選后的返回值,對于返回值的迭代進行一些原理的分析。

  filter用于過濾篩選可迭代對象中的元素,如果符合條件則返回對應的元素序列(類型為filter),filter接受兩個參數(shù),一個是函數(shù)用于篩選元素,返回值為True或Flase,另一個是可迭代對象。

  filter用法

  evens = filter(is_odd, range(-5, 10))

  print(list(evens))

  示例結(jié)果:

  [2, 4, 6, 8]

  filter函數(shù)的返回值是一個可迭代對象,這一點很關(guān)鍵,這也是為什么我說filter函數(shù)是高級語法的原因。

  為什么不返回列表?,如果返回的是列表,那么在filter函數(shù)執(zhí)行過程中,就必須對列表里的每一個數(shù)據(jù)進行對2取模運算,這樣很浪費空間,因此filter在實現(xiàn)時采用了迭代器技術(shù),將計算延遲到對filter函數(shù)返回結(jié)果進行遍歷時才進行。

  怎么驗證上面的說法呢,對代碼稍加修改

  from collections import Iterable

python課程免費試聽預約

  • 地區(qū):
  • 姓名:
  • 手機:

  def func(x):

  print("接收參數(shù)" + str(x))

  return x%2 == 0

  lst = [1, 2, 5, 6, 7]

  res = filter(func, lst)

  # res 是一個可迭代對象

  print(isinstance(res, Iterable), type(res))

  for item in res:

  print(item)

  現(xiàn)在,我不使用lambda表達式對數(shù)據(jù)進行判斷,而是使用自由度更高的函數(shù),在函數(shù)func中,我輸出接收到的參數(shù),如果對lst數(shù)據(jù)中的過濾發(fā)生執(zhí)行filter函數(shù)期間,那么,在輸出res類型之前,就會執(zhí)行函數(shù)func中的print語句,現(xiàn)在來看程序?qū)嶋H的執(zhí)行結(jié)果

  True

  接收參數(shù)1

  接收參數(shù)2

  2

  接收參數(shù)5

  接收參數(shù)6

  6

  接收參數(shù)7

  程序輸出結(jié)果表明,在執(zhí)行filter函數(shù)時,并沒有調(diào)用func函數(shù)對lst中的數(shù)據(jù)進行過濾,而是在對res進行遍歷時才調(diào)用func函數(shù)進行過濾。

  在filter函數(shù)返回的問題上我們又進行了深入的探索,用代碼分析了為什么返回不是列表的原因。

  如今python編程語言市場需求大,薪資待遇上萬盡在咫尺!如果你也想學習python技術(shù)可以填寫下面表單,Python學習資料限時免費領!

責編:fushihao

上一篇:教你使用python3代碼輸出嵌套式對象

下一篇: 沒有了

  • 會計考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語考試
  • 學歷考試
彰化市| 林周县| 壤塘县| 平湖市| 贵定县| 三亚市| 屯昌县| 枣庄市| 新建县| 巴林左旗| 前郭尔| 梁河县| 徐闻县| 无极县| 松潘县| 灌南县| 福泉市| 寿阳县| 永兴县| 福海县| 松原市| 肇庆市| 合川市| 彰化市| 仪征市| 雷山县| 宜州市| 阿克苏市| 临洮县| 广河县| 田阳县| 布拖县| 紫金县| 南漳县| 扬中市| 离岛区| 大荔县| 济宁市| 轮台县| 泰兴市| 鲁山县|