国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

別再寫嵌套 for 循環了!Python 自帶的 itertools,小白也能十分鐘學會

開發
其實Python早就自帶了一個“循環救星”——itertools模塊,不用裝,拿過來就能用,能把嵌套循環、手動排序、合并列表這些麻煩事,一行代碼搞定。

你是不是也寫過這樣的代碼?

  • 想合并3個列表,手動寫list1 + list2 + list3,結果中間漏了一個;
  • 想生成“顏色+尺寸”的所有搭配(紅S、紅M、藍S...),寫了兩層for循環,嵌套得像繞迷宮;
  • 想給列表元素加序號,又要定義i=0,再寫i +=1,代碼又長又丑。

其實Python早就自帶了一個“循環救星”——itertools模塊,不用裝,拿過來就能用,能把嵌套循環、手動排序、合并列表這些麻煩事,一行代碼搞定。今天就用最白話的方式,帶小白和技術渣吃透它最常用的8個功能,學完就能用!

一、先搞懂:itertools是啥?為啥新手也該用它?

不用記復雜概念!記住3個關鍵點:

  • 不用裝:是Python自帶的,Import就能用,不用pip install;
  • 省內存:它不一次性把所有數據裝到內存里(比如生成100萬個數,不會占100萬個數的內存),用的時候才生成,跑大數據也不卡;
  • 少寫循環:以前要寫3行嵌套for循環的事,用它一行就能搞定,代碼少了,bug也少了。

簡單說,itertools就是“幫你偷懶的工具”,專門解決“處理列表/序列”的麻煩事。

二、八個必學函數:從“麻煩循環”到“一行代碼”

每個函數都按“解決啥問題→代碼示例→結果解釋→小提醒”來講,新手跟著抄代碼就行。

1. count:給數據自動加序號(不用手動i+=1)

解決啥問題?

給列表元素加排名/序號,比如“1. Alice,2. Bob”,不用再寫i=1然后i +=1。

代碼示例:

import itertools  # 先導入,這行必須有

# 要加序號的列表
names = ["Alice", "Bob", "Charlie"]

# 用count(1):從1開始計數,配合zip把序號和名字綁一起
indexed_names = zip(itertools.count(1), names)

# 打印結果
for idx, name in indexed_names:
    print(f"{idx}. {name}")

結果:

1. Alice
2. Bob
3. Charlie

小提醒:

  • itertools.count(1)里的1是“起始數”,想從10開始就寫count(10);
  • 它會一直數下去,所以要配合zip(列表結束就停),別單獨用,不然會無限循環。

2. chain:合并多個列表(不用手動拼接)

解決啥問題?

想把3個、4個列表合并成1個,不用寫list1 + list2 + list3,尤其列表多的時候更方便。

代碼示例:

import itertools

# 3個要合并的列表(甚至可以是元組、字符串)
list1 = [1, 2, 3]
list2 = ["a", "b"]
list3 = (4, 5)  # 元組也能合并

# 一行合并
combined = list(itertools.chain(list1, list2, list3))
print(combined)

結果:

[1, 2, 3, 'a', 'b', 4, 5]

小提醒:

  • 比list1 + list2好在哪?如果列表很多(比如10個),chain不用寫一堆+,直接把所有列表放進去就行;
  • 最后要轉成list()才能看到結果,不然是個迭代器(新手不用管迭代器,記住加list()就行)。

3. groupby:按規則分組(不用寫循環判斷)

解決啥問題?

把列表按某個規則分組,比如“按單詞長度分組”“按數字大小分組”,不用寫if-else循環。

代碼示例:按單詞長度分組

import itertools

# 要分組的單詞
words = ["cat", "dog", "elephant", "bird", "ant"]

# 第一步:先按長度排序!groupby只認連續的相同元素(重點坑?。?sorted_words = sorted(words, key=lambda x: len(x))  # 按長度排序

# 第二步:按長度分組
grouped = itertools.groupby(sorted_words, key=lambda x: len(x))

# 打印結果
for length, group in grouped:
    print(f"長度{length}的單詞:{list(group)}")

結果:

長度3的單詞:['cat', 'dog', 'ant']
長度4的單詞:['bird']
長度8的單詞:['elephant']

小提醒:

  • 新手必踩坑:groupby只會給“連續的相同元素”分組!如果不先排序(比如words沒排序),會把相同長度的單詞分成多組,一定要先sorted;
  • key=lambda x: len(x)就是“按單詞長度當分組依據”,想按其他規則改這里就行(比如按首字母key=lambda x: x[0])。

4. product:生成所有組合(代替嵌套for循環)

解決啥問題?

想生成“兩個列表所有可能的搭配”,比如“顏色(紅、藍)+尺寸(S、M)”,不用寫兩層for循環。

代碼示例:生成顏色+尺寸的所有搭配

import itertools

# 兩個要搭配的列表
colors = ["red", "blue"]
sizes = ["S", "M", "L"]

# 一行生成所有組合
all_combos = list(itertools.product(colors, sizes))
print(all_combos)

結果:

[('red', 'S'), ('red', 'M'), ('red', 'L'), ('blue', 'S'), ('blue', 'M'), ('blue', 'L')]

小提醒:

? 相當于“嵌套for循環”的簡化版,比如原來要寫:

for color in colors:
    for size in sizes:
        print((color, size))

現在一行product就搞定;

? 想讓一個列表自搭配(比如0和1生成3位二進制),用repeat:itertools.product([0,1], repeat=3),結果就是[(0,0,0), (0,0,1), ..., (1,1,1)]。

5. combinations:選“不重復的組合”(比如抽獎)

解決啥問題?

從列表里選幾個元素,不考慮順序,也不重復選(比如從5個人里選2個抽獎,AB和BA算一個)。

代碼示例:從4個人里選2個抽獎

import itertools

# 候選人
people = ["A", "B", "C", "D"]

# 選2個,不重復,不考慮順序
lottery = list(itertools.combinations(people, 2))
print(lottery)

結果:

[('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]

小提醒:

  • 和product的區別:product考慮順序(AB和BA都有),combinations不考慮(只有AB);
  • 第二個參數2是“選幾個元素”,想選3個就寫3。

6. zip_longest:合并不同長度的列表(不會截斷)

解決啥問題?

用普通zip合并列表時,短的列表結束了就會截斷(比如[1,2]和[3,4,5],zip會只合并到(2,4)),zip_longest能把短的補滿(比如補“N/A”)。

代碼示例:合并名字和分數(名字比分數多1個)

import itertools

names = ["Alice", "Bob", "Charlie"]  # 3個名字
scores = [85, 92]  # 2個分數,少1個

# 用fillvalue補缺失的分數
result = list(itertools.zip_longest(names, scores, fillvalue="沒分數"))
print(result)

結果:

[('Alice', 85), ('Bob', 92), ('Charlie', '沒分數')]

小提醒:

  • fillvalue是“補什么值”,可以是數字、字符串,比如缺的分數補0就寫fillvalue=0;
  • 普通zip會截斷,zip_longest會補滿,根據需求選。

7. islice:切片(比列表切片更靈活)

解決啥問題?

想從列表/迭代器里“取前N個”“跳過前幾個再取”,不用手動寫循環,尤其對不能直接切片的對象(比如生成器)更有用。

代碼示例:

import itertools

# 一個長列表(比如100個元素,這里用range模擬)
big_list = range(100)

# 1. 取前5個:islice(對象, 結束位置)
first5 = list(itertools.islice(big_list, 5))
print("前5個:", first5)

# 2. 跳過前3個,取接下來的4個:islice(對象, 起始, 結束)
skip3_take4 = list(itertools.islice(big_list, 3, 7))
print("跳過3取4個:", skip3_take4)

# 3. 每隔2個取一個(步長2):islice(對象, 起始, 結束, 步長)
every2 = list(itertools.islice(big_list, 0, 10, 2))
print("每隔2個取一個:", every2)

結果:

前5個: [0, 1, 2, 3, 4]
跳過3取4個: [3, 4, 5, 6]
每隔2個取一個: [0, 2, 4, 6, 8]

小提醒:

  • 和列表切片big_list[3:7]的區別:islice能處理不能切片的對象(比如itertools.count()生成的迭代器);
  • 不支持負索引(比如不能寫islice(big_list, -5)),新手記住用正整數就行。

8. accumulate:計算累積值(比如累加、累乘)

解決啥問題?

想算“累加和”“累乘積”“運行最大值”,不用寫循環手動加/乘。

代碼示例:

import itertools
import operator  # 用來做累乘,新手不用管,導入就行

# 原始數據
data = [1, 2, 3, 4, 5]

# 1. 累加(默認就是加)
running_sum = list(itertools.accumulate(data))
print("累加和:", running_sum)

# 2. 累乘(用operator.mul當運算規則)
running_prod = list(itertools.accumulate(data, operator.mul))
print("累乘積:", running_prod)

# 3. 運行最大值(用max當規則)
prices = [3, 1, 4, 1, 5, 9]
running_max = list(itertools.accumulate(prices, max))
print("運行最大值:", running_max)

結果:

累加和: [1, 3, 6, 10, 15]  # 1→1+2=3→3+3=6→...
累乘積: [1, 2, 6, 24, 120] # 1→1×2=2→2×3=6→...
運行最大值: [3, 3, 4, 4, 5, 9]  # 每次取當前最大的數

小提醒:除了加、乘、max,還能自定義運算(比如每次加10),新手先掌握加、乘、max就行。

三、新手避坑指南(3個最容易錯的點)

  • groupby必須先排序:再強調一次!groupby只給“連續的相同元素”分組,沒排序的話,相同規則的元素會被分成多組。比如words = ["cat", "elephant", "dog"]不排序,按長度分組會把“cat”和“dog”(都是3個字母)分成兩組,排序后才會放一起。
  • 迭代器要轉成list才能看結果:itertools的函數返回的是“迭代器”(不是列表),所以要加list()才能打印出具體內容,比如list(itertools.chain(list1, list2)),不然打印的是<itertools.chain object at 0x0000...>,新手會以為出錯了。
  • count和cycle別單獨用:count()會無限計數,cycle()會無限循環,單獨用會讓程序卡死,一定要配合zip或islice限制長度,比如zip(itertools.count(), names)(names結束就停)。

四、最后:新手怎么練?

  • 抄代碼改參數:把上面的示例代碼抄到自己的Python里,改改參數(比如count從10開始,product加個新顏色),看結果怎么變;
  • 改自己的舊代碼:找出以前寫過的嵌套for循環、手動合并列表的代碼,試著用itertools重寫,比如把“兩層for循環生成組合”改成product;
  • 記常用場景:不用記所有函數,先記住“合并列表用chain”“生成組合用product”“分組用groupby”“加序號用count”,這些是新手最常用的。

itertools不是“高深技術”,而是幫新手偷懶的工具——代碼寫得少,bug就少,效率還高。

責任編輯:趙寧寧 來源: Python小甲魚
相關推薦

2022-03-09 09:44:58

云原生Linux云計算

2023-11-09 14:44:27

Docker鏡像容器

2016-12-22 21:47:04

SEDLinuxUnix

2024-03-04 15:19:52

Python編程內建函數

2012-07-10 01:22:32

PythonPython教程

2019-04-01 14:59:56

負載均衡服務器網絡

2020-12-17 06:48:21

SQLkafkaMySQL

2016-01-04 11:18:00

KubernetesKubernetes概容器技術

2024-05-13 09:28:43

Flink SQL大數據

2015-09-06 09:22:24

框架搭建快速高效app

2023-11-30 10:21:48

虛擬列表虛擬列表工具庫

2024-06-19 09:58:29

2022-06-16 07:31:41

Web組件封裝HTML 標簽

2021-09-07 09:40:20

Spark大數據引擎

2023-04-12 11:18:51

甘特圖前端

2023-04-12 08:21:30

ChatGPTQQDiscord

2021-11-28 22:16:01

Go語言工具

2019-08-13 09:11:26

2025-02-10 00:00:10

2025-04-30 09:37:07

點贊
收藏

51CTO技術棧公眾號

亚洲欧美资源在线| 中文字幕不卡在线视频极品| 亚洲成人自拍| 精品国产亚洲一区二区三区在线| 亚洲美女免费视频| 一区二区三区av| 日本欧美视频| 色综久久综合桃花网| 日本在线视频观看| 亚洲免费av网站| 亚洲国产精品无码av| 国产精品国码视频| 欧美重口另类videos人妖| 综合在线影院| 337p亚洲精品色噜噜噜| 日本福利片免费看| 国产午夜精品在线观看| 最新视频 - x88av| 夜夜嗨一区二区| 国产伊人精品在线| 97久久综合区小说区图片区| 亚洲人成电影在线观看天堂色| 免费a在线看| 欧美性色视频在线| 国产三级三级看三级| 岛国一区二区三区| 在线视频亚洲自拍| 奇米四色…亚洲| 欧美xxxx黑人又粗又长精品| 综合天天久久| 国产精品久久久久久久天堂| 日韩精品视频中文字幕| 亚洲视频一区二区| 成人欧美大片| 亚洲美女视频网站| sm在线播放| 欧美成人精品二区三区99精品| 久香视频在线观看| 欧美色视频日本版| 久蕉依人在线视频| 欧美在线短视频| 久久天堂电影| 欧美伊人久久久久久午夜久久久久| 性疯狂做受xxxx高清视频| 国产精品国产三级国产| 一菊综合网成人综合网| 中文字幕一区不卡| 精品美女调教视频| 亚洲午夜久久久久久久久电影院| 91尤物视频在线观看| 亚洲一区二区三区免费看| 夜夜嗨网站十八久久| 久久综合九色欧美狠狠| 欧美一区=区| 伊人久久婷婷色综合98网| 激情小说亚洲一区| 国产曰肥老太婆无遮挡| av午夜精品一区二区三区| 久久久久久久久久久久久国产精品 | 日韩在线亚洲| 欧美精品生活片| 日韩免费一级| 日本一欧美一欧美一亚洲视频 | 日韩欧美亚洲日产国产| 久久精品中文| 日本黄网站色大片免费观看| 成人一区二区三区在线观看 | 欧美中文一区二区三区| 成人午夜影视| 亚洲免费视频观看| 在线观看欧美| 国产成人福利视频| 亚洲特色特黄| 永久域名在线精品| 久久久久久亚洲综合| 最近中文字幕mv2018在线高清| 黑丝美女久久久| 好操啊在线观看免费视频| 成久久久网站| 亚洲综合在线观看视频| 日本免费不卡| 精品国产免费视频| 国产精品99久久免费| 国产精品久久久999| 国产精品美女久久久| 黄色成人在线看| 天天影视网天天综合色在线播放| 日本动漫理论片在线观看网站 | 在线最新版中文在线| 欧美多人爱爱视频网站| 亚洲免费二区| 欧美中文字幕在线观看视频| 亚洲精品第1页| xxxcom在线观看| 欧美激情xxxx性bbbb| 欧美日韩一卡| 亚洲人午夜精品| 久久精品一级| 亚洲综合中文字幕在线观看| 国产一区在线视频| 男人天堂2020| 日韩精品中文字| 欧美一区三区| 免费的av在线| 日韩欧美在线第一页| 亚洲国产尤物| 国产精品久久久久久久久久直播 | 国产欧美一区二区三区四区 | 国产精品vip| 国产精品久久久av久久久| 久久亚洲国产精品一区二区| av网址在线观看免费| 欧美高清视频一二三区 | 国产老女人精品毛片久久| 黄色免费看片| 亚洲欧美国产精品va在线观看| jlzzjlzz亚洲女人| 777av视频| 日韩视频一区在线观看| 欧美日韩一二三四| 国产极品粉嫩福利姬萌白酱| 这里只有精品99re| 日韩在线第七页| 色一情一乱一伦一区二区三区日本| 欧美一区二区三区的| 欧美丰满老妇| 亚洲最大综合网| 亚洲精品美女久久| 三年中国国语在线播放免费| 日本久久91av| 亚洲一区在线观看免费观看电影高清 | 一区二区蜜桃| 久久婷婷国产| 热久久精品免费视频| 国产精品18毛片一区二区| 97福利一区二区| 国产精品日韩欧美| 日韩美女毛茸茸| 国产欧美久久久久久| 国产日韩专区在线| 久久久久国色av免费观看性色| 5566中文字幕一区二区电影| 91精品国产一区二区三区| 亚洲成年人影院| 亚洲午夜免费电影| 亚洲精品一区二区在线| 91po在线观看91精品国产性色| 欧洲久久久久久| 99久久久无码国产精品性色戒| 欧美成人xxxxx| 日本亚洲精品| 国产精选久久| 国产精品xx| 91精选在线| 波多野结衣在线影院| 精品www久久久久奶水| 99在线精品视频| 日本在线观看一区二区| 国产成人综合av| 国产精品久久久久久亚洲伦| 欧美理论片在线| 久久精品国产2020观看福利| 久久91精品国产91久久跳| 国产精品96久久久久久又黄又硬| 久久爱av电影| 日韩欧美手机在线| 天天操天天爽天天射| 91日韩精品一区| 一区二区中文视频| 色哟哟欧美精品| 日韩欧美国产视频| 欧美一区二区免费| 亚洲精品第一国产综合精品| 久久久久久久久久国产| 免费拍拍拍网站| 黄色一级一级片| 成人免费一区二区三区视频网站| 国产电影一区二区三区爱妃记| 欧美精品网站| 岛国av在线一区| 美腿丝袜亚洲色图| 五月天亚洲婷婷| 欧美丰满片xxx777| 91久久精品日日躁夜夜躁国产| 蜜臀av无码一区二区三区| 成人免费观看网站| 国产精品丝袜久久久久久不卡| 色在人av网站天堂精品| 成人h片在线播放免费网站| 蜜桃tv在线播放| 国产精品成久久久久| 99久久精品免费看| 亚洲成人免费网站| 亚洲高清视频一区| 在线观看成人影院| 福利影院在线看| 亚洲成aⅴ人片久久青草影院| 中文字幕不卡三区| 在线观看日韩一区| 欧美一区二区三区艳史|