Python Academy · पाठ

itertools: संयोजन-विज्ञान

क्रमचय, संयोजन और कार्तीय गुणनफल बनाएँ।

पाठ 2, कुल 4 में से13 चरण

itertools: संयोजन-विज्ञान, CoddyKit पर Python Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Python Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

संयोजन-विज्ञान का अवलोकन

itertools चार संयोजनात्मक फ़ंक्शन उपलब्ध कराता है: product, permutations, combinations और combinations_with_replacement।

import itertools

# All orderings of 2 items from ABC
print(list(itertools.permutations("ABC", 2)))
# [(A,B),(A,C),(B,A),(B,C),(C,A),(C,B)]

product()

product(*iterables, repeat=1) कार्तीय गुणनफल निकालता है — यह नेस्टेड for-लूप के बराबर है।

import itertools

print(list(itertools.product([1,2], ["a","b"])))
# [(1,"a"),(1,"b"),(2,"a"),(2,"b")]

# repeat=2 pairs each element with itself
print(list(itertools.product(range(2), repeat=2)))
# [(0,0),(0,1),(1,0),(1,1)]

permutations()

permutations(it, r) लंबाई r वाली सभी क्रमबद्ध व्यवस्थाएँ देता है। कुल संख्या: P(n,r) = n!/(n-r)!।

import itertools

result = list(itertools.permutations([1,2,3], 2))
print(result)
# [(1,2),(1,3),(2,1),(2,3),(3,1),(3,2)]
print(len(result))  # 6

combinations()

combinations(it, r) बिना दोहराव के लंबाई r वाले सभी अक्रमबद्ध चयन देता है। कुल संख्या: C(n,r) = n!/(r!(n-r)!)।

import itertools

result = list(itertools.combinations([1,2,3,4], 2))
print(result)
# [(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)]
print(len(result))  # 6

combinations_with_replacement()

combinations_with_replacement(it, r) में किसी तत्व को एक संयोजन में एक से अधिक बार शामिल किया जा सकता है।

import itertools

result = list(itertools.combinations_with_replacement("AB", 2))
print(result)
# [(A,A),(A,B),(B,B)]

सभी तत्व बनाए बिना गिनती करना

केवल गिनती करने के लिए सभी तत्व उत्पन्न करने के बजाय math.perm, math.comb या len() का संक्षिप्त तरीका उपयोग कीजिए (len() सीमित परिणामों के लिए काम करता है)।

import math

print(math.perm(10, 3))   # 720
print(math.comb(10, 3))   # 120

पासवर्ड/कुंजी बनाना

संयोजनात्मक इटरेटर, सब कुछ मेमोरी में लोड किए बिना संभावित कुंजियाँ या परीक्षण-स्थितियाँ बनाने के लिए उपयोगी होते हैं।

import itertools, string

chars = string.ascii_lowercase
# All 2-char lowercase combos:
for combo in itertools.combinations(chars, 2):
    pass  # process without materialising

product से ग्रिड निर्देशांक

नेस्टेड लूप के बिना 2D ग्रिड पर जाने के लिए product(range(rows), range(cols)) का उपयोग कीजिए।

import itertools

for row, col in itertools.product(range(3), range(3)):
    print(f"({row},{col})", end=" ")

सभी उपसमुच्चयों का परीक्षण

0 से n तक की प्रत्येक लंबाई के लिए combinations पर इटरेट करके किसी सूची के सभी उपसमुच्चय बनाइए।

import itertools

items = [1, 2, 3]
all_subsets = []
for r in range(len(items)+1):
    all_subsets.extend(itertools.combinations(items, r))
print(all_subsets)

combinations से दोहराव हटाना

तत्वों के प्रत्येक युग्म की तुलना ठीक एक बार करने के लिए combinations का उपयोग कीजिए। इससे (a,b) और (b,a) जैसी दोहराई गई तुलनाओं से बचा जा सकता है।

import itertools

words = ["apple","apricot","banana","blueberry"]
for a, b in itertools.combinations(words, 2):
    if a[0] == b[0]:
        print(f"Same letter: {a}, {b}")

प्रदर्शन संबंधी विचार

संयोजनात्मक अनुक्रम बहुत तेज़ी से बड़े होते हैं। permutations(range(12)) से 479 मिलियन परिणाम उत्पन्न होते हैं। हमेशा जेनरेटर का उपयोग कीजिए और केवल आवश्यक परिणामों को ही सूची में बदलिए।

import itertools, math

n = 12
print(f"P(12,12) = {math.factorial(n):,}")   # 479,001,600
# Never: list(itertools.permutations(range(12)))
# Instead: iterate lazily and break early

त्वरित जाँच

किस itertools फ़ंक्शन से किसी संग्रह के सभी अक्रमबद्ध युग्म बिना दोहराव के प्राप्त होते हैं?

पुनरावलोकन

कार्तीय गुणनफलों के लिए product, क्रमबद्ध व्यवस्थाओं के लिए permutations, अक्रमबद्ध उपसमुच्चयों के लिए combinations और तत्वों के दोहराए जा सकने पर combinations_with_replacement का उपयोग कीजिए। संयोजनात्मक इटरेटर को हमेशा लेज़ी तरीके से संसाधित कीजिए।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
76
पाठ
320

अक्सर पूछे जाने वाले प्रश्न

क्या “itertools: संयोजन-विज्ञान” पाठ निःशुल्क है?

हाँ—“itertools: संयोजन-विज्ञान” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Python Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“itertools: संयोजन-विज्ञान” में मैं क्या सीखूँगा?

क्रमचय, संयोजन और कार्तीय गुणनफल बनाएँ। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Python Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Python Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Python Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“itertools: संयोजन-विज्ञान” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Python Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Python Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. itertools: अनंत और सीमित इटरेटर
  2. itertools: संयोजन-विज्ञान
  3. functools: partial और reduce
  4. functools: lru_cache और cached_property
← Python Academy पर वापस जाएँ