精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

itertools:用于處理可迭代對象的模塊

開發 前端
接收多個可迭代對象(或者迭代器)作為參數,返回一個迭代器。它會生成所有輸入迭代器的元素,就好像這些元素來自一個迭代器一樣。

Python 有一個內置模塊 itertools,從名字可以看出它是專門用來處理可迭代對象的,那么它都支持哪些操作呢?一起來看一下吧。

itertools.chain

接收多個可迭代對象(或者迭代器)作為參數,返回一個迭代器。它會生成所有輸入迭代器的元素,就好像這些元素來自一個迭代器一樣。

import itertools

c = itertools.chain([1, 2, 3], "abc", {"k1": "v1", "k2": "v2"})
# 直接打印的話是一個對象
print(c) 
"""
<itertools.chain object at 0x00000000029745F8>
"""
print(list(c)) 
"""
1 2 3 a b c k1 k2
"""

# 還可以使用 chain.from_iterable
# 參數接收多個可迭代對象組成的一個可迭代對象
c = itertools.chain.from_iterable(
    [[1, 2, 3], "abc", {"k1": "v1", "k2": "v2"}]
)
print(list(c)) 
"""
1 2 3 a b c k1 k2
"""

itertools.zip_longest

從名字上可以看出,功能和內置的 zip 類似。確實如此,就是將多個可迭代對象對應位置的元素組合起來,像拉鏈(zip)一樣。只不過內置的 zip 是 "木桶原理",一方匹配到頭了,那么就不匹配了,而 zip_longest 是以長的那一方為基準。

import itertools

# 內置的 zip 是把多個迭代器對象中的每一個元素按照順序組合到一個元組中
name = ["高老師", "豬哥", "S 佬"]
where = ["江蘇", "北京", "深圳"]
z = zip(name, where)
print(z)
"""
<zip object at 0x00000257F3FEBEC0>
"""
print(list(z))
"""
[('高老師', '江蘇'), ('豬哥', '北京'), ('S 佬', '深圳')]
"""

# 但如果兩者長度不一致怎么辦?
name = ["高老師", "豬哥", "S 佬", "xxx"]
where = ["江蘇", "北京", "深圳"]
print(list(zip(name, where)))
"""
[('高老師', '江蘇'), ('豬哥', '北京'), ('S 佬', '深圳')]
"""
# 可以看到,長度不一致的時候,當一方結束之后就停止匹配

# 如果想匹配長的,那么可以使用 itertools 下面的 zip_longest
print(list(itertools.zip_longest(name, where))) 
"""
[('高老師', '江蘇'), ('豬哥', '北京'), ('S 佬', '深圳'), ('xxx', None)]
"""
# 默認使用 None 進行匹配,當然我們也可以指定內容
print(list(itertools.zip_longest(name, where, fillvalue="中國")))
"""
[('高老師', '江蘇'), ('豬哥', '北京'), ('S 佬', '深圳'), ('xxx', '中國')]
"""

itertools.islice

如果一個迭代器里面包含了很多元素,我們只想要一部分的話,可以使用 islice,按照索引從迭代器中返回所選擇的元素,并且得到的還是一個迭代器。

import itertools

num = range(20)
# 選擇 index=5 到 index=10(不包含)的位置
s = itertools.islice(num, 5, 10)
print(list(s))  # [5, 6, 7, 8, 9]

# 選擇開頭到 index=5 的位置
s = itertools.islice(num, 5)
print(list(s))  # [0, 1, 2, 3, 4]

# 選擇從 index=5 到 index=15(不包含)的位置,步長為 3
s = itertools.islice(num, 5, 15, 3)
print(list(s))  # [5, 8, 11, 14]

注意:islice 不支持負數索引,因為不知道迭代器有多長,除非全部讀取,可是那樣的話干嘛不直接轉為列表之后再用切片獲取呢?

之所以使用 islice 這種形式,就是為了在不全部讀取的情況下,也能選擇出我們想要的部分,所以這種方式只支持從前往后,不能從后往前。

itertools.tee

將一個可迭代對象拷貝 n 份。

import itertools

r = [1, 2, 3, 4, 5]
i1, i2 = itertools.tee(r, 2)
print(list(i1))  # [1, 2, 3, 4, 5]
print(list(i2))  # [1, 2, 3, 4, 5]

itertools.count

import itertools

"""
count(start=0, step=1) 返回一個迭代器,負責無限地生成連續的整數
接收兩個參數:起始(默認為0)和步長(默認為1)
等價于:
def count(firstval=0, step=1):
    x = firstval
    while 1:
        yield x
        x += step
"""
# 起始值為 5,步長為 2
c1 = itertools.count(5, 2)
print(list(itertools.islice(c1, 5))) 
"""
[5, 7, 9, 11, 13]
"""

itertools.cycle

import itertools

"""
cycle(iterable) 返回一個迭代器,會無限重復里面的內容,直到內存耗盡
"""
c2 = itertools.cycle("abc")
print(list(itertools.islice(c2, 10)))
"""
['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a']
"""

itertools.repeat

import itertools

"""
repeat(obj, times=None),無限重復 obj,除非指定 times
"""
# 重復指定的次數
print(list(itertools.repeat("abc", 3))) 
"""
['abc', 'abc', 'abc']
"""

itertools.dropwhile

刪除滿足條件的值,注意:是刪除。

import itertools

l = [1, 2, 3, 4, 5]
drop_l = itertools.dropwhile(lambda x: x < 3, l)
# 依舊返回迭代器
print(drop_l) 
"""
<itertools.dropwhile object at 0x000001AD63AD0488>
"""
# 可以看到小于3的都被丟掉了
print(list(drop_l))  
"""
[3, 4, 5]
"""

itertools.takewhile

這個和 filter 是一樣的,保留滿足條件的值。

import itertools

l = [1, 2, 3, 4, 5]
take_l = itertools.takewhile(lambda x: x < 3, l)
print(take_l) 
"""
<itertools.takewhile object at 0x000001D37F512948>
"""
print(list(take_l)) 
"""
[1, 2]
"""
filter_l = filter(lambda x: x < 3, l)
print(list(filter_l))  
"""
[1, 2]
"""

itertools.compress

提供了另一種過濾可迭代對象元素的方法。

import itertools

condition = [True, False, True, True, False]
data = [1, 2, 3, 4, 5]
print(list(itertools.compress(data, condition))) 
"""
[1, 3, 4]
"""

# 除了指定 True 和 False,還可以使用 Python 其它類型的值
# 會以其對應的布爾值作為判斷依據
condition = [1, 0, "x", "x", {}]  
print(list(itertools.compress(data, condition))) 
"""
[1, 3, 4]
"""

itertools.accumulate

accumulate 處理輸入的序列,得到一個類似于斐波那契的結果。

import itertools

print(list(itertools.accumulate(range(5))))  
"""
[0, 1, 3, 6, 10]
"""
print(list(itertools.accumulate("abcde")))  
"""
["a", "ab", "abc", "abcd", "abcde"]
"""
# 所以這里的相加還要看具體的含義
try:
    print(list(itertools.accumulate([[1, 2], (3, 4)])))
except TypeError as e:
    print(e)  
    """
    can only concatenate list (not "tuple") to list
    """
    # 這里就顯示無法將列表和元組相加

# 當然也可以自定義
data = [1, 2, 3, 4, 5]
method = lambda x, y: x * y
print(list(itertools.accumulate(data, method))) 
"""
[1, 2, 6, 24, 120]
"""
# 可以看到這里的結果就改變了

itertools.product

product 則是會將多個可迭代對象組合成一個笛卡爾積。

import itertools

print(list(itertools.product([1, 2, 3], [2, 3]))) 
"""
[(1, 2), (1, 3), (2, 2), (2, 3), (3, 2), (3, 3)]
"""

itertools.permutations

import itertools

data = [1, 2, 3, 4]
print(list(itertools.permutations(data)))
# 根據排列組合,顯然是 A44,總共 4 * 3 * 2 * 1 = 24 種組合
"""
[(1, 2, 3, 4), (1, 2, 4, 3), (1, 3, 2, 4), (1, 3, 4, 2), (1, 4, 2, 3), (1, 4, 3, 2),
(2, 1, 3, 4), (2, 1, 4, 3), (2, 3, 1, 4), (2, 3, 4, 1), (2, 4, 1, 3), (2, 4, 3, 1),
(3, 1, 2, 4), (3, 1, 4, 2), (3, 2, 1, 4), (3, 2, 4, 1), (3, 4, 1, 2), (3, 4, 2, 1),
(4, 1, 2, 3), (4, 1, 3, 2), (4, 2, 1, 3), (4, 2, 3, 1), (4, 3, 1, 2), (4, 3, 2, 1)]
"""

# 結果是 A42,總共 4 * 3 = 12 種組合
print(list(itertools.permutations(data, 2)))
"""
[(1, 2), (1, 3), (1, 4), 
 (2, 1), (2, 3), (2, 4), 
 (3, 1), (3, 2), (3, 4), 
 (4, 1), (4, 2), (4, 3)]
"""

itertools.combinations

permutations 顯然是考慮了順序,相當于排列組合里面 A,而 combinations 只考慮元素是否一致,而不管順序,相當于排列組合里面的 C。

import itertools

# permutations 只要順序不同就看做一種結果
# combinations 則保證只要元素相同就是同一種結果
data = "abcd"
print(list(itertools.combinations(data, 3)))  
"""
[('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'c', 'd'), ('b', 'c', 'd')]
"""
# 如果拿抽小球來作比喻的話,顯然 combinations 是不放回的,也就是不會重復單個的輸入元素
# 但有時候可能也需要考慮包含重復元素的組合,相當于抽小球的時候有放回
# 對于這種情況,可以使用 combinations_with_replacement
print(list(itertools.combinations_with_replacement(data, 3)))
"""
[('a', 'a', 'a'), ('a', 'a', 'b'), ('a', 'a', 'c'), ('a', 'a', 'd'), ('a', 'b', 'b'),
('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'c', 'c'), ('a', 'c', 'd'), ('a', 'd', 'd'),
('b', 'b', 'b'), ('b', 'b', 'c'), ('b', 'b', 'd'), ('b', 'c', 'c'), ('b', 'c', 'd'),
('b', 'd', 'd'), ('c', 'c', 'c'), ('c', 'c', 'd'), ('c', 'd', 'd'), ('d', 'd', 'd')]
"""

以上就是該模塊的用法,但說實話,感覺大部分都沒啥卵用。

責任編輯:武曉燕 來源: 古明地覺的編程教室
相關推薦

2022-10-24 13:02:38

2021-11-28 08:03:41

Python迭代器對象

2020-11-24 08:00:22

JavaScript對象迭代器

2020-11-06 13:42:59

itertools

2022-10-26 08:25:06

Python編程迭代器

2021-09-14 07:26:25

JavaScript迭代對象

2025-03-26 10:56:54

2021-09-03 10:00:00

JavaScript迭代對象

2024-11-14 13:15:22

JavaScript可迭代數組

2022-01-15 10:01:15

Javascript 高階函數前端

2009-07-15 16:29:39

Jython連接JavJavaUtils模塊

2020-09-18 07:52:46

Itertools庫Python語言

2017-06-26 16:26:15

Python迭代對象迭代器

2023-11-08 13:55:27

2022-10-27 11:36:59

map函數對象

2023-06-08 08:16:33

TickerPixiJS

2015-11-09 09:58:31

大數據Lambda架構

2025-01-08 17:20:00

pytho數據分組itertools

2021-09-28 14:40:03

Python內置庫itertools

2023-11-28 11:22:51

Pythonitertools庫工具
點贊
收藏

51CTO技術棧公眾號

色综合久久88色综合天天看泰| 欧美色视频在线| 国模精品一区二区三区| 青青青国产在线| 日韩欧美视频专区| 欧美不卡一区二区| 免费激情视频在线观看| a天堂中文在线官网在线| 成人av电影在线网| 国产精品午夜国产小视频| 久久久国产成人| 国产亚洲一区二区三区不卡| 91精品国产欧美一区二区18| 日韩精品xxxx| jizz性欧美| 26uuu国产电影一区二区| 91夜夜未满十八勿入爽爽影院| 日韩欧美亚洲视频| 91精品国产乱码久久久久久 | 欧美国产在线电影| 蜜桃传媒一区二区亚洲| 91麻豆精品激情在线观看最新| 欧美亚洲日本国产| 国产亚洲欧美在线视频| 成人欧美在线| 中文字幕国产一区| 久久久精品国产一区二区三区| 国产内射老熟女aaaa∵| 日本vs亚洲vs韩国一区三区二区 | 国产精品18p| 97色伦图片97综合影院| 亚洲日本aⅴ片在线观看香蕉| 日本wwwwwww| 色综合一区二区日本韩国亚洲| 日韩欧美国产骚| 国产女主播自拍| 91高清在线观看视频| 国产精品麻豆欧美日韩ww| 看欧美日韩国产| 少妇av在线播放| 国产91精品免费| 91青青草免费观看| 国产精品日韩无码| 久久69国产一区二区蜜臀| 国产精品jizz在线观看麻豆| 日本一区二区三区免费视频| 欧美精品日本| 久国内精品在线| 欧美做爰啪啪xxxⅹ性| 欧美gvvideo网站| 色先锋资源久久综合5566| 黄免费在线观看| 欧美日韩老妇| 伊人青青综合网站| 少妇精品无码一区二区免费视频| 亚洲人成精品久久久| 亚洲国产成人爱av在线播放| 国产午夜在线一区二区三区| 91精品入口| 亚洲电影天堂av| 在线视频 日韩| 国产一区二区三区亚洲| 亚洲国产精品国自产拍av秋霞 | 午夜视频网站在线观看| 久久亚洲电影| 国产精品入口福利| 在线观看亚洲国产| 韩国欧美一区二区| 99在线观看| 天堂在线视频观看| 久久先锋影音av鲁色资源网| 日韩高清专区| 蜜桃av在线免费观看| 欧美欧美黄在线二区| 亚洲精品在线不卡| 纪美影视在线观看电视版使用方法| 国产亚洲第一伦理第一区| 最近免费中文字幕视频2019| 黑鬼狂亚洲人videos| 欧美亚洲不卡| 91精品国产乱码久久久久久蜜臀| 欧美黄色一级大片| 美女在线一区二区| 99视频网站| 日本啊v在线| 国产精品久久久久久久久晋中 | 久久电影网站中文字幕| 91久久精品在线| 蜜臀久久精品久久久久| 久久久久国色av免费看影院| 中文字幕剧情在线观看一区| 国产蜜臀av在线播放| 色老综合老女人久久久| 91日韩精品视频| 久本草在线中文字幕亚洲| 亚洲无亚洲人成网站77777| 99久久久免费精品| aⅴ色国产欧美| 成人黄色av网| 婷婷亚洲一区二区三区| 久久久精品黄色| www.日本在线视频| 色猫猫成人app| 亚洲精品一区二区三区蜜桃下载| 日韩视频在线观看免费视频| 欧美日韩亚洲一区| 国产欧美日韩高清| 三级无遮挡在线观看| 亚洲精品国产无套在线观| 国产免费一区二区三区视频| 日韩精品视频一区二区三区| 永久555www成人免费| 日韩精品国产一区二区| 精品一区二区三区欧美| 久久久婷婷一区二区三区不卡| 国产1区在线| 欧美性感一类影片在线播放| 人妻激情偷乱频一区二区三区 | 国产 欧美 日韩 一区| 朝桐光一区二区| 亚洲丁香婷深爱综合| 开心激情五月网| 久久在线91| 国产女人水真多18毛片18精品 | 亚洲精品va在线观看| mm1313亚洲国产精品无码试看| jazzjazz国产精品久久| 欧美另类第一页| 一本色道久久综合无码人妻| 久久久久国产精品免费免费搜索| 欧美日韩福利在线| 欧美欧美在线| 久久久精品一区| 在线观看不卡的av| 国产嫩草影院久久久久| 久久精品一区二| 亚洲宅男网av| 欧美在线www| 日韩欧美电影在线观看| 亚洲成人av福利| 亚洲一区二区三区四区av| 欧美淫片网站| 97人人模人人爽视频一区二区| 免费在线观看av| 欧美日韩一级大片网址| 1024在线看片| 老司机免费视频一区二区| 污视频在线免费观看一区二区三区| 中国色在线日|韩| 亚洲摸下面视频| 在线精品免费视| 91在线视频播放地址| 男人日女人逼逼| 天堂网av成人| 奇米四色中文综合久久| 韩日视频在线| 欧美午夜电影网| 日韩免费av一区| 狠狠狠色丁香婷婷综合久久五月| 精品国产无码在线| 精品国产亚洲日本| 久久久久国产一区二区三区| 免看一级a毛片一片成人不卡| 国产一区二区三区美女| 国内自拍中文字幕| av老司机免费在线| 亚洲大胆美女视频| 三级视频在线观看| 中文字幕av不卡| 在线观看视频在线观看| 亚洲大胆视频| 日产中文字幕在线精品一区| 欧美成人高清视频在线观看| 久久视频在线观看免费| 国模无码一区二区三区| 欧美性猛交xxxx免费看久久久| 亚洲自拍偷拍图| 狠狠久久亚洲欧美| 波多野结衣综合网| 精品免费视频| 亚洲综合精品一区二区| 白浆视频在线观看| 一区二区三区久久精品| 97人妻精品一区二区三区视频 | 中文天堂在线视频| 亚洲蜜臀av乱码久久精品蜜桃| 最新版天堂资源在线| 日日夜夜精品免费视频| 熟女视频一区二区三区| 蜜臀av一区| 国产日韩欧美一二三区| 国内在线免费视频| 伊人一区二区三区久久精品| 亚洲老妇色熟女老太| 91国产丝袜在线播放| jizz亚洲少妇| 国产亚洲短视频| 四虎国产精品永久免费观看视频| 黄色亚洲在线| 亚洲永久激情精品| 九色丨蝌蚪丨成人| 成人h猎奇视频网站| 亚洲精品日产| 色综合91久久精品中文字幕| 成人影视在线播放| 亚洲国产成人一区| 99在线观看精品视频| 日韩欧美aaa| 激情四射综合网| 国产精品麻豆99久久久久久| 中文字幕a在线观看| 韩国女主播成人在线观看| 久久精品99国产| 国产专区一区| 伊人色综合久久天天五月婷| 亚州av日韩av| 国产v亚洲v天堂无码| 未满十八勿进黄网站一区不卡| 51色欧美片视频在线观看| 天天色天天射天天综合网| 伊人久久大香线蕉av一区二区| 凸凹人妻人人澡人人添| 日韩免费看网站| 国产精品国产av| 在线欧美小视频| 天天做天天爱夜夜爽| 一区二区日韩av| 亚洲综合视频网站| 国产精品嫩草影院com| 亚洲人成人无码网www国产| 成人毛片视频在线观看| 天堂va欧美va亚洲va老司机| 韩国v欧美v日本v亚洲v| 人人干人人干人人| 奇米精品一区二区三区在线观看一| 97国产在线播放| 亚洲人成高清| 野外做受又硬又粗又大视频√| 亚洲九九视频| 久久99国产精品一区| 91精品国产乱码久久久久久久| 一区二区三区四区五区视频| 日韩大片在线| 水蜜桃一区二区三区| 欧美日韩伦理在线免费| 午夜欧美性电影| 日韩成人影院| 中文字幕日韩精品一区二区| 99久久www免费| 国产又黄又爽免费视频| 亚洲精品一区二区妖精| eeuss中文| 欧美精品aa| 青青草国产免费| 999亚洲国产精| 99爱视频在线| 丝瓜av网站精品一区二区| 成年人视频在线免费| 水蜜桃久久夜色精品一区的特点 | 国产麻豆成人精品| 国产女主播av| 欧美日本一区二区高清播放视频| 老司机午夜网站| 国产精品九九| 日韩中文字幕三区| 日韩经典一区二区| 亚洲涩涩在线观看| 国产高清无密码一区二区三区| 女同性αv亚洲女同志| thepron国产精品| 小早川怜子久久精品中文字幕| 欧美韩日一区二区三区四区| 91久久久久久久久久久久久久 | www.av麻豆| 色999日韩国产欧美一区二区| 中文资源在线播放| 日韩一区二区三免费高清| 天天爱天天干天天操| 亚洲图片在区色| 精品美女在线观看视频在线观看| 欧美人与性动交a欧美精品| 少妇在线看www| 美日韩精品免费观看视频| 国产嫩草在线视频| 国产成人啪精品视频免费网| 欧美2区3区4区| 蜜桃成人免费视频| 小处雏高清一区二区三区| 免费看毛片的网址| 日韩电影一区二区三区| 欧美午夜精品一区二区| 久久精品人人做人人爽97| 91久久国产综合| 色综合久久久久| 成人1区2区3区| 亚洲乱亚洲乱妇无码| 黄色片网站在线| 日本中文字幕成人| 日本一区二区三区播放| 欧美一级爱爱| 欧美精品三区| jizz18女人| 久久综合九色综合久久久精品综合 | aaa亚洲精品| 日本一级特级毛片视频| 欧美日韩精品在线视频| 国产熟女一区二区三区四区| 亚洲深夜福利网站| 色爱综合区网| 国产欧美日韩视频| 久久成人高清| 国产真人做爰毛片视频直播 | 色欧美片视频在线观看在线视频| 国产草草影院ccyycom| 国产亚洲人成网站在线观看| 国产色播av在线| 91超碰在线电影| 水蜜桃久久夜色精品一区| 日韩精品视频久久| 不卡电影一区二区三区| 男的操女的网站| 欧美丝袜丝nylons| 欧美孕妇孕交| 午夜精品一区二区三区在线| 免费观看亚洲天堂| 亚洲二区自拍| 久久综合导航| 美国黄色a级片| 天天影视涩香欲综合网 | 国产成人自拍高清视频在线免费播放| av手机在线播放| 色哟哟精品一区| 天天av天天翘| 国语自产精品视频在线看一大j8| 精品国产亚洲一区二区三区大结局 | 稀缺小u女呦精品呦| 亚洲精品水蜜桃| 国产人妖一区二区三区| 日韩在线激情视频| 国产原创一区| 一区二区精品国产| 青青草国产精品亚洲专区无| 国产人妻大战黑人20p| 91福利社在线观看| 国产成人天天5g影院在线观看| 国产99视频在线观看| 精品一区亚洲| 中文字幕视频在线免费观看| 国产欧美视频在线观看| 中文字幕视频免费观看| 中文字幕亚洲一区二区三区| 国产欧美自拍| 黄色www在线观看| 国产成人在线看| 国产在线一二区| 亚洲国产日韩欧美在线图片| 在线高清av| 欧洲久久久久久| 久久成人免费日本黄色| 艳妇荡乳欲伦69影片| 欧美sm美女调教| 色在线中文字幕| 亚洲国产激情一区二区三区| 老司机一区二区| 久久久久黄色片| 亚洲精品美女在线观看播放| 高清不卡av| 亚洲精品美女久久7777777| 韩国一区二区在线观看| 精品处破女学生| 亚洲精品自拍第一页| 成人网ww555视频免费看| 中文字幕一区二区三区精彩视频| 国产精品一区二区无线| 99热国产在线观看| 国产一区二区三区日韩欧美| 亚洲精品69| 国产美女主播在线播放| 国产日韩欧美制服另类| 国产又粗又大又黄| 国模叶桐国产精品一区| 九色精品91| 波多野结衣电影免费观看| 午夜av区久久| 亚洲1卡2卡3卡4卡乱码精品| 99re在线观看视频| 久久天堂成人| 18岁成人毛片| 亚洲欧美日韩爽爽影院| 国产精一区二区| 北条麻妃在线视频观看| 国产精品第一页第二页第三页| 黄色一级a毛片| 国产伦精品一区二区三区精品视频| 欧美日韩一区二区高清| 在线小视频你懂的| 亚洲第一区中文99精品| 日韩综合久久| 免费黄色福利视频| 亚洲精品日产精品乱码不卡|