欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 如何展開嵌套的序列

 更新時間:2020年08月01日 10:17:10   作者:David Beazley  
這篇文章主要介紹了Python 如何展開嵌套的序列,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

問題

你想將一個多層嵌套的序列展開成一個單層列表

解決方案

可以寫一個包含 yield from 語句的遞歸生成器來輕松解決這個問題。比如:

from collections import Iterable

def flatten(items, ignore_types=(str, bytes)):
  for x in items:
    if isinstance(x, Iterable) and not isinstance(x, ignore_types):
      yield from flatten(x)
    else:
      yield x

items = [1, 2, [3, 4, [5, 6], 7], 8]
# Produces 1 2 3 4 5 6 7 8
for x in flatten(items):
  print(x)

在上面代碼中, isinstance(x, Iterable) 檢查某個元素是否是可迭代的。 如果是的話, yield from 就會返回所有子例程的值。最終返回結(jié)果就是一個沒有嵌套的簡單序列了。

額外的參數(shù) ignore_types 和檢測語句 isinstance(x, ignore_types) 用來將字符串和字節(jié)排除在可迭代對象外,防止將它們再展開成單個的字符。 這樣的話字符串?dāng)?shù)組就能最終返回我們所期望的結(jié)果了。比如:

>>> items = ['Dave', 'Paula', ['Thomas', 'Lewis']]
>>> for x in flatten(items):
...   print(x)
...
Dave
Paula
Thomas
Lewis
>>>

討論

語句 yield from 在你想在生成器中調(diào)用其他生成器作為子例程的時候非常有用。 如果你不使用它的話,那么就必須寫額外的 for 循環(huán)了。比如:

def flatten(items, ignore_types=(str, bytes)):
  for x in items:
    if isinstance(x, Iterable) and not isinstance(x, ignore_types):
      for i in flatten(x):
        yield i
    else:
      yield x

盡管只改了一點點,但是 yield from 語句看上去感覺更好,并且也使得代碼更簡潔清爽。

之前提到的對于字符串和字節(jié)的額外檢查是為了防止將它們再展開成單個字符。 如果還有其他你不想展開的類型,修改參數(shù) ignore_types 即可。

最后要注意的一點是, yield from 在涉及到基于協(xié)程和生成器的并發(fā)編程中扮演著更加重要的角色。

以上就是Python 如何展開嵌套的序列的詳細(xì)內(nèi)容,更多關(guān)于Python 展開嵌套的序列的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)保存最后N個元素的方法

    Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)保存最后N個元素的方法

    這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)與算法 保存最后N個元素的方法,涉及Python基于迭代器與生成器實現(xiàn)歷史記錄功能的相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • 詳解python-圖像處理(映射變換)

    詳解python-圖像處理(映射變換)

    這篇文章主要介紹了python-圖像處理(映射變換),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • python 爬蟲如何實現(xiàn)百度翻譯

    python 爬蟲如何實現(xiàn)百度翻譯

    這篇文章主要介紹了python 爬蟲 簡單實現(xiàn)百度翻譯的示例,幫助大家更好的理解和使用python 爬蟲,感興趣的朋友可以了解下
    2020-11-11
  • 使用pyqt5 實現(xiàn)ComboBox的鼠標(biāo)點擊觸發(fā)事件

    使用pyqt5 實現(xiàn)ComboBox的鼠標(biāo)點擊觸發(fā)事件

    這篇文章主要介紹了使用pyqt5 實現(xiàn)ComboBox的鼠標(biāo)點擊觸發(fā)事件,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • selenium環(huán)境搭建及基本元素定位方式詳解

    selenium環(huán)境搭建及基本元素定位方式詳解

    selenium最初是一個自動化測試工具,而爬蟲中使用它主要是為了解決requests無法執(zhí)行javaScript代碼的問題,這篇文章主要介紹了selenium環(huán)境搭建及基本元素定位方式,需要的朋友可以參考下
    2023-04-04
  • python實現(xiàn)模擬器爬取抖音評論數(shù)據(jù)的示例代碼

    python實現(xiàn)模擬器爬取抖音評論數(shù)據(jù)的示例代碼

    這篇文章主要介紹了python實現(xiàn)模擬器爬取抖音評論數(shù)據(jù)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 代碼實例講解python3的編碼問題

    代碼實例講解python3的編碼問題

    在本篇內(nèi)容里小編給各位分享了關(guān)于python3的編碼問題以及相關(guān)實例代碼,有需要的朋友們參考一下。
    2019-07-07
  • python實現(xiàn)linux下抓包并存庫功能

    python實現(xiàn)linux下抓包并存庫功能

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)linux下抓包并存庫功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • python字符串的拼接方法總結(jié)

    python字符串的拼接方法總結(jié)

    這篇文章主要介紹了python字符串的拼接方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • python 遞歸遍歷文件夾,并打印滿足條件的文件路徑實例

    python 遞歸遍歷文件夾,并打印滿足條件的文件路徑實例

    下面小編就為大家?guī)硪黄猵ython 遞歸遍歷文件夾,并打印滿足條件的文件路徑實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論