[{"data":1,"prerenderedAt":918},["ShallowReactive",2],{"blog-\u002Fblog\u002Fpython-enumerate-zip-unpacking-explained":3},{"id":4,"title":5,"body":6,"description":904,"difficulty":905,"extension":906,"framework":907,"frameworkSlug":54,"meta":908,"navigation":117,"order":121,"path":909,"qaPath":910,"seo":911,"stem":912,"subtopic":913,"topic":914,"topicSlug":915,"updated":916,"__hash__":917},"blog\u002Fblog\u002Fpython-enumerate-zip-unpacking-explained.md","Python enumerate, zip and Unpacking Explained — Indexes, Pairing, and Star Args",{"type":7,"value":8,"toc":893},"minimark",[9,14,31,35,49,155,161,210,214,224,294,297,340,344,350,408,412,421,494,503,507,516,580,584,590,700,706,710,724,841,845,889],[10,11,13],"h2",{"id":12},"enumerate-zip-and-unpacking-explained","enumerate, zip, and unpacking, explained",[15,16,17,18,22,23,26,27,30],"p",{},"These tools replace clunky index-juggling with clear, Pythonic loops. Reaching for\n",[19,20,21],"code",{},"range(len(...))"," in an interview is a small tell; ",[19,24,25],{},"enumerate"," and ",[19,28,29],{},"zip"," are what\nexperienced Python developers use. This guide covers both, plus the star-unpacking tricks\nthat go with them.",[10,32,34],{"id":33},"enumerate-index-and-value-together","enumerate — index and value together",[15,36,37,38,42,43,45,46,48],{},"When you need the index ",[39,40,41],"em",{},"and"," the item, use ",[19,44,25],{}," instead of ",[19,47,21],{},":",[50,51,56],"pre",{"className":52,"code":53,"language":54,"meta":55,"style":55},"language-python shiki shiki-themes github-light github-dark","for i, name in enumerate([\"a\", \"b\", \"c\"]):\n    print(i, name)        # 0 a \u002F 1 b \u002F 2 c\n\n# the un-Pythonic version it replaces:\nfor i in range(len(names)):\n    print(i, names[i])\n","python","",[19,57,58,99,112,119,125,147],{"__ignoreMap":55},[59,60,63,67,71,74,78,81,85,88,91,93,96],"span",{"class":61,"line":62},"line",1,[59,64,66],{"class":65},"szBVR","for",[59,68,70],{"class":69},"sVt8B"," i, name ",[59,72,73],{"class":65},"in",[59,75,77],{"class":76},"sj4cs"," enumerate",[59,79,80],{"class":69},"([",[59,82,84],{"class":83},"sZZnC","\"a\"",[59,86,87],{"class":69},", ",[59,89,90],{"class":83},"\"b\"",[59,92,87],{"class":69},[59,94,95],{"class":83},"\"c\"",[59,97,98],{"class":69},"]):\n",[59,100,102,105,108],{"class":61,"line":101},2,[59,103,104],{"class":76},"    print",[59,106,107],{"class":69},"(i, name)        ",[59,109,111],{"class":110},"sJ8bj","# 0 a \u002F 1 b \u002F 2 c\n",[59,113,115],{"class":61,"line":114},3,[59,116,118],{"emptyLinePlaceholder":117},true,"\n",[59,120,122],{"class":61,"line":121},4,[59,123,124],{"class":110},"# the un-Pythonic version it replaces:\n",[59,126,128,130,133,135,138,141,144],{"class":61,"line":127},5,[59,129,66],{"class":65},[59,131,132],{"class":69}," i ",[59,134,73],{"class":65},[59,136,137],{"class":76}," range",[59,139,140],{"class":69},"(",[59,142,143],{"class":76},"len",[59,145,146],{"class":69},"(names)):\n",[59,148,150,152],{"class":61,"line":149},6,[59,151,104],{"class":76},[59,153,154],{"class":69},"(i, names[i])\n",[15,156,157,158,48],{},"Set a different starting index with ",[19,159,160],{},"start",[50,162,164],{"className":52,"code":163,"language":54,"meta":55,"style":55},"for rank, name in enumerate([\"a\", \"b\"], start=1):\n    print(rank, name)     # 1 a \u002F 2 b\n",[19,165,166,200],{"__ignoreMap":55},[59,167,168,170,173,175,177,179,181,183,185,188,191,194,197],{"class":61,"line":62},[59,169,66],{"class":65},[59,171,172],{"class":69}," rank, name ",[59,174,73],{"class":65},[59,176,77],{"class":76},[59,178,80],{"class":69},[59,180,84],{"class":83},[59,182,87],{"class":69},[59,184,90],{"class":83},[59,186,187],{"class":69},"], ",[59,189,160],{"class":190},"s4XuR",[59,192,193],{"class":65},"=",[59,195,196],{"class":76},"1",[59,198,199],{"class":69},"):\n",[59,201,202,204,207],{"class":61,"line":101},[59,203,104],{"class":76},[59,205,206],{"class":69},"(rank, name)     ",[59,208,209],{"class":110},"# 1 a \u002F 2 b\n",[10,211,213],{"id":212},"zip-iterate-multiple-sequences-in-lockstep","zip — iterate multiple sequences in lockstep",[15,215,216,218,219,223],{},[19,217,29],{}," pairs up items from several iterables, yielding tuples until the ",[220,221,222],"strong",{},"shortest"," runs\nout:",[50,225,227],{"className":52,"code":226,"language":54,"meta":55,"style":55},"names = [\"Ada\", \"Alan\"]\nages = [36, 41]\nfor name, age in zip(names, ages):\n    print(name, age)      # Ada 36 \u002F Alan 41\n",[19,228,229,250,269,284],{"__ignoreMap":55},[59,230,231,234,236,239,242,244,247],{"class":61,"line":62},[59,232,233],{"class":69},"names ",[59,235,193],{"class":65},[59,237,238],{"class":69}," [",[59,240,241],{"class":83},"\"Ada\"",[59,243,87],{"class":69},[59,245,246],{"class":83},"\"Alan\"",[59,248,249],{"class":69},"]\n",[59,251,252,255,257,259,262,264,267],{"class":61,"line":101},[59,253,254],{"class":69},"ages ",[59,256,193],{"class":65},[59,258,238],{"class":69},[59,260,261],{"class":76},"36",[59,263,87],{"class":69},[59,265,266],{"class":76},"41",[59,268,249],{"class":69},[59,270,271,273,276,278,281],{"class":61,"line":114},[59,272,66],{"class":65},[59,274,275],{"class":69}," name, age ",[59,277,73],{"class":65},[59,279,280],{"class":76}," zip",[59,282,283],{"class":69},"(names, ages):\n",[59,285,286,288,291],{"class":61,"line":121},[59,287,104],{"class":76},[59,289,290],{"class":69},"(name, age)      ",[59,292,293],{"class":110},"# Ada 36 \u002F Alan 41\n",[15,295,296],{},"Because it stops at the shortest, extra items in a longer iterable are silently dropped:",[50,298,300],{"className":52,"code":299,"language":54,"meta":55,"style":55},"list(zip([1, 2, 3], [\"a\", \"b\"]))   # [(1, 'a'), (2, 'b')] — the 3 is lost\n",[19,301,302],{"__ignoreMap":55},[59,303,304,307,309,311,313,315,317,320,322,325,328,330,332,334,337],{"class":61,"line":62},[59,305,306],{"class":76},"list",[59,308,140],{"class":69},[59,310,29],{"class":76},[59,312,80],{"class":69},[59,314,196],{"class":76},[59,316,87],{"class":69},[59,318,319],{"class":76},"2",[59,321,87],{"class":69},[59,323,324],{"class":76},"3",[59,326,327],{"class":69},"], [",[59,329,84],{"class":83},[59,331,87],{"class":69},[59,333,90],{"class":83},[59,335,336],{"class":69},"]))   ",[59,338,339],{"class":110},"# [(1, 'a'), (2, 'b')] — the 3 is lost\n",[10,341,343],{"id":342},"zip_longest-when-lengths-differ","zip_longest when lengths differ",[15,345,346,347,48],{},"If you'd rather pad to the longest, use ",[19,348,349],{},"itertools.zip_longest",[50,351,353],{"className":52,"code":352,"language":54,"meta":55,"style":55},"from itertools import zip_longest\nlist(zip_longest([1, 2, 3], [\"a\"], fillvalue=\"?\"))\n# [(1, 'a'), (2, '?'), (3, '?')]\n",[19,354,355,369,403],{"__ignoreMap":55},[59,356,357,360,363,366],{"class":61,"line":62},[59,358,359],{"class":65},"from",[59,361,362],{"class":69}," itertools ",[59,364,365],{"class":65},"import",[59,367,368],{"class":69}," zip_longest\n",[59,370,371,373,376,378,380,382,384,386,388,390,392,395,397,400],{"class":61,"line":101},[59,372,306],{"class":76},[59,374,375],{"class":69},"(zip_longest([",[59,377,196],{"class":76},[59,379,87],{"class":69},[59,381,319],{"class":76},[59,383,87],{"class":69},[59,385,324],{"class":76},[59,387,327],{"class":69},[59,389,84],{"class":83},[59,391,187],{"class":69},[59,393,394],{"class":190},"fillvalue",[59,396,193],{"class":65},[59,398,399],{"class":83},"\"?\"",[59,401,402],{"class":69},"))\n",[59,404,405],{"class":61,"line":114},[59,406,407],{"class":110},"# [(1, 'a'), (2, '?'), (3, '?')]\n",[10,409,411],{"id":410},"unzipping-with-zip","Unzipping with zip(*)",[15,413,414,415,417,418,48],{},"The same ",[19,416,29],{}," \"transposes\" back when you unpack a sequence of pairs with ",[19,419,420],{},"*",[50,422,424],{"className":52,"code":423,"language":54,"meta":55,"style":55},"pairs = [(1, \"a\"), (2, \"b\"), (3, \"c\")]\nnums, letters = zip(*pairs)\nnums         # (1, 2, 3)\nletters      # ('a', 'b', 'c')\n",[19,425,426,462,478,486],{"__ignoreMap":55},[59,427,428,431,433,436,438,440,442,445,447,449,451,453,455,457,459],{"class":61,"line":62},[59,429,430],{"class":69},"pairs ",[59,432,193],{"class":65},[59,434,435],{"class":69}," [(",[59,437,196],{"class":76},[59,439,87],{"class":69},[59,441,84],{"class":83},[59,443,444],{"class":69},"), (",[59,446,319],{"class":76},[59,448,87],{"class":69},[59,450,90],{"class":83},[59,452,444],{"class":69},[59,454,324],{"class":76},[59,456,87],{"class":69},[59,458,95],{"class":83},[59,460,461],{"class":69},")]\n",[59,463,464,467,469,471,473,475],{"class":61,"line":101},[59,465,466],{"class":69},"nums, letters ",[59,468,193],{"class":65},[59,470,280],{"class":76},[59,472,140],{"class":69},[59,474,420],{"class":65},[59,476,477],{"class":69},"pairs)\n",[59,479,480,483],{"class":61,"line":114},[59,481,482],{"class":69},"nums         ",[59,484,485],{"class":110},"# (1, 2, 3)\n",[59,487,488,491],{"class":61,"line":121},[59,489,490],{"class":69},"letters      ",[59,492,493],{"class":110},"# ('a', 'b', 'c')\n",[15,495,496,499,500,502],{},[19,497,498],{},"zip(*pairs)"," feeds each pair as a separate argument, so ",[19,501,29],{}," lines up all the firsts, then\nall the seconds.",[10,504,506],{"id":505},"building-a-dict-from-two-sequences","Building a dict from two sequences",[15,508,509,511,512,515],{},[19,510,29],{}," plus ",[19,513,514],{},"dict"," is the idiomatic way to combine keys and values:",[50,517,519],{"className":52,"code":518,"language":54,"meta":55,"style":55},"keys = [\"x\", \"y\", \"z\"]\nvals = [1, 2, 3]\ndict(zip(keys, vals))     # {'x': 1, 'y': 2, 'z': 3}\n",[19,520,521,545,566],{"__ignoreMap":55},[59,522,523,526,528,530,533,535,538,540,543],{"class":61,"line":62},[59,524,525],{"class":69},"keys ",[59,527,193],{"class":65},[59,529,238],{"class":69},[59,531,532],{"class":83},"\"x\"",[59,534,87],{"class":69},[59,536,537],{"class":83},"\"y\"",[59,539,87],{"class":69},[59,541,542],{"class":83},"\"z\"",[59,544,249],{"class":69},[59,546,547,550,552,554,556,558,560,562,564],{"class":61,"line":101},[59,548,549],{"class":69},"vals ",[59,551,193],{"class":65},[59,553,238],{"class":69},[59,555,196],{"class":76},[59,557,87],{"class":69},[59,559,319],{"class":76},[59,561,87],{"class":69},[59,563,324],{"class":76},[59,565,249],{"class":69},[59,567,568,570,572,574,577],{"class":61,"line":114},[59,569,514],{"class":76},[59,571,140],{"class":69},[59,573,29],{"class":76},[59,575,576],{"class":69},"(keys, vals))     ",[59,578,579],{"class":110},"# {'x': 1, 'y': 2, 'z': 3}\n",[10,581,583],{"id":582},"extended-star-unpacking","Extended (star) unpacking",[15,585,586,587,589],{},"The ",[19,588,420],{}," operator captures \"the rest\" into a list during unpacking — useful for splitting\noff the head or tail:",[50,591,593],{"className":52,"code":592,"language":54,"meta":55,"style":55},"first, *rest = [1, 2, 3, 4]      # first=1, rest=[2, 3, 4]\n*init, last = [1, 2, 3, 4]       # init=[1, 2, 3], last=4\na, *mid, z = [1, 2, 3, 4, 5]     # a=1, mid=[2, 3, 4], z=5\n",[19,594,595,630,661],{"__ignoreMap":55},[59,596,597,600,602,605,607,609,611,613,615,617,619,621,624,627],{"class":61,"line":62},[59,598,599],{"class":69},"first, ",[59,601,420],{"class":65},[59,603,604],{"class":69},"rest ",[59,606,193],{"class":65},[59,608,238],{"class":69},[59,610,196],{"class":76},[59,612,87],{"class":69},[59,614,319],{"class":76},[59,616,87],{"class":69},[59,618,324],{"class":76},[59,620,87],{"class":69},[59,622,623],{"class":76},"4",[59,625,626],{"class":69},"]      ",[59,628,629],{"class":110},"# first=1, rest=[2, 3, 4]\n",[59,631,632,634,637,639,641,643,645,647,649,651,653,655,658],{"class":61,"line":101},[59,633,420],{"class":65},[59,635,636],{"class":69},"init, last ",[59,638,193],{"class":65},[59,640,238],{"class":69},[59,642,196],{"class":76},[59,644,87],{"class":69},[59,646,319],{"class":76},[59,648,87],{"class":69},[59,650,324],{"class":76},[59,652,87],{"class":69},[59,654,623],{"class":76},[59,656,657],{"class":69},"]       ",[59,659,660],{"class":110},"# init=[1, 2, 3], last=4\n",[59,662,663,666,668,671,673,675,677,679,681,683,685,687,689,691,694,697],{"class":61,"line":114},[59,664,665],{"class":69},"a, ",[59,667,420],{"class":65},[59,669,670],{"class":69},"mid, z ",[59,672,193],{"class":65},[59,674,238],{"class":69},[59,676,196],{"class":76},[59,678,87],{"class":69},[59,680,319],{"class":76},[59,682,87],{"class":69},[59,684,324],{"class":76},[59,686,87],{"class":69},[59,688,623],{"class":76},[59,690,87],{"class":69},[59,692,693],{"class":76},"5",[59,695,696],{"class":69},"]     ",[59,698,699],{"class":110},"# a=1, mid=[2, 3, 4], z=5\n",[15,701,702,703,705],{},"Only one starred name is allowed per unpacking, and it always collects into a ",[19,704,306],{},".",[10,707,709],{"id":708},"star-args-in-a-call","Star args in a call",[15,711,712,713,715,716,719,720,723],{},"The flip side: ",[19,714,420],{}," in a ",[220,717,718],{},"call"," spreads an iterable into positional arguments, and ",[19,721,722],{},"**","\nspreads a dict into keyword arguments:",[50,725,727],{"className":52,"code":726,"language":54,"meta":55,"style":55},"def point(x, y, z):\n    return (x, y, z)\n\ncoords = [1, 2, 3]\npoint(*coords)              # same as point(1, 2, 3)\n\nkwargs = {\"x\": 1, \"y\": 2, \"z\": 3}\npoint(**kwargs)             # same as point(x=1, y=2, z=3)\n",[19,728,729,741,749,753,774,787,791,828],{"__ignoreMap":55},[59,730,731,734,738],{"class":61,"line":62},[59,732,733],{"class":65},"def",[59,735,737],{"class":736},"sScJk"," point",[59,739,740],{"class":69},"(x, y, z):\n",[59,742,743,746],{"class":61,"line":101},[59,744,745],{"class":65},"    return",[59,747,748],{"class":69}," (x, y, z)\n",[59,750,751],{"class":61,"line":114},[59,752,118],{"emptyLinePlaceholder":117},[59,754,755,758,760,762,764,766,768,770,772],{"class":61,"line":121},[59,756,757],{"class":69},"coords ",[59,759,193],{"class":65},[59,761,238],{"class":69},[59,763,196],{"class":76},[59,765,87],{"class":69},[59,767,319],{"class":76},[59,769,87],{"class":69},[59,771,324],{"class":76},[59,773,249],{"class":69},[59,775,776,779,781,784],{"class":61,"line":127},[59,777,778],{"class":69},"point(",[59,780,420],{"class":65},[59,782,783],{"class":69},"coords)              ",[59,785,786],{"class":110},"# same as point(1, 2, 3)\n",[59,788,789],{"class":61,"line":149},[59,790,118],{"emptyLinePlaceholder":117},[59,792,794,797,799,802,804,807,809,811,813,815,817,819,821,823,825],{"class":61,"line":793},7,[59,795,796],{"class":69},"kwargs ",[59,798,193],{"class":65},[59,800,801],{"class":69}," {",[59,803,532],{"class":83},[59,805,806],{"class":69},": ",[59,808,196],{"class":76},[59,810,87],{"class":69},[59,812,537],{"class":83},[59,814,806],{"class":69},[59,816,319],{"class":76},[59,818,87],{"class":69},[59,820,542],{"class":83},[59,822,806],{"class":69},[59,824,324],{"class":76},[59,826,827],{"class":69},"}\n",[59,829,831,833,835,838],{"class":61,"line":830},8,[59,832,778],{"class":69},[59,834,722],{"class":65},[59,836,837],{"class":69},"kwargs)             ",[59,839,840],{"class":110},"# same as point(x=1, y=2, z=3)\n",[10,842,844],{"id":843},"recap","Recap",[15,846,847,848,852,853,855,856,858,859,863,864,866,867,869,870,873,874,877,878,881,882,26,884,715,886,888],{},"Use ",[220,849,850],{},[19,851,25],{}," (with an optional ",[19,854,160],{},") instead of ",[19,857,21],{}," when you need\nindexes, and ",[220,860,861],{},[19,862,29],{}," to walk several iterables in lockstep — it stops at the shortest, so\nuse ",[19,865,349],{}," to pad. ",[19,868,498],{}," unzips, and ",[19,871,872],{},"dict(zip(keys, vals))"," builds\na mapping. ",[220,875,876],{},"Star unpacking"," (",[19,879,880],{},"first, *rest = ...",") splits a sequence into head and tail,\nwhile ",[19,883,420],{},[19,885,722],{},[39,887,718],{}," spread an iterable or dict into arguments.",[890,891,892],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":55,"searchDepth":101,"depth":101,"links":894},[895,896,897,898,899,900,901,902,903],{"id":12,"depth":101,"text":13},{"id":33,"depth":101,"text":34},{"id":212,"depth":101,"text":213},{"id":342,"depth":101,"text":343},{"id":410,"depth":101,"text":411},{"id":505,"depth":101,"text":506},{"id":582,"depth":101,"text":583},{"id":708,"depth":101,"text":709},{"id":843,"depth":101,"text":844},"How to loop the Pythonic way with enumerate and zip, unzip with zip(*), zip_longest, extended star unpacking, and building dicts from paired iterables.","easy","md","Python",{},"\u002Fblog\u002Fpython-enumerate-zip-unpacking-explained","\u002Fpython\u002Fiteration\u002Fenumerate-zip",{"title":5,"description":904},"blog\u002Fpython-enumerate-zip-unpacking-explained","enumerate, zip & Unpacking","Comprehensions & Iteration","iteration","2026-06-19","85OYFNCcAPOEB2lsTjXpGrZhL-3VRuE3XwhKR7vWg84",1782244093624]