Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में पर्म्यूटेशन और कॉम्बिनेशन

पायथन का itertools मॉड्यूल पर्म्यूटेशन और कॉम्बिनेशन जेनरेट करने के लिए कुशल फंक्शन्स प्रदान करता है।

इंस्टॉलेशन/इम्पोर्ट

from itertools import permutations, combinations, combinations_with_replacement

पर्म्यूटेशन (क्रम महत्वपूर्ण)

क्रम में व्यवस्था: nPr = n! / (n-r)!

उदाहरण 1: पूर्ण पर्म्यूटेशन

items = ['a', 'b', 'c']
perms = permutations(items)

for p in perms:
    print(p)

आउटपुट

('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')

उदाहरण 2: निर्दिष्ट लंबाई (r) के साथ पर्म्यूटेशन

items = ['p', 'y', 't', 'h', 'o', 'n']
perms = permutations(items, 2)  # लंबाई 2

for p in perms:
    print(p)

आउटपुट

('p', 'y') ('p', 't') ('p', 'h') ('p', 'o') ('p', 'n')
('y', 'p') ('y', 't') ('y', 'h') ('y', 'o') ('y', 'n')
('t', 'p') ('t', 'y') ('t', 'h') ('t', 'o') ('t', 'n')
('h', 'p') ('h', 'y') ('h', 't') ('h', 'o') ('h', 'n')
('o', 'p') ('o', 'y') ('o', 't') ('o', 'h') ('o', 'n')
('n', 'p') ('n', 'y') ('n', 't') ('n', 'h') ('n', 'o')

कॉम्बिनेशन (क्रम महत्वपूर्ण नहीं)

चयन जहां क्रम मायने नहीं रखता: nCr = n! / (r!(n-r)!)

उदाहरण 1: निर्दिष्ट लंबाई के कॉम्बिनेशन्स

items = ['p', 'y', 't', 'h', 'o', 'n']
combos = combinations(items, 5)  # 5 एलिमेंट्स चुनें

for c in combos:
    print(c)

आउटपुट

('p', 'y', 't', 'h', 'o')
('p', 'y', 't', 'h', 'n')
('p', 'y', 't', 'o', 'n')
('p', 'y', 'h', 'o', 'n')
('p', 't', 'h', 'o', 'n')
('y', 't', 'h', 'o', 'n')

उदाहरण 2: रिप्लेसमेंट के साथ कॉम्बिनेशन्स

एलिमेंट्स दोहराए जा सकते हैं।

combos = combinations_with_replacement(items, 2)

for c in combos:
    print(c)

आउटपुट

('p', 'p') ('p', 'y') ('p', 't') ('p', 'h') ('p', 'o') ('p', 'n')
('y', 'y') ('y', 't') ('y', 'h') ('y', 'o') ('y', 'n')
('t', 't') ('t', 'h') ('t', 'o') ('t', 'n')
('h', 'h') ('h', 'o') ('h', 'n')
('o', 'o') ('o', 'n')
('n', 'n')

व्यावहारिक उदाहरण

पासवर्ड क्रैकिंग (ब्रूट फोर्स - केवल शिक्षा के लिए)

import itertools
import string

def brute_force_password(target, max_length=4):
    chars = string.ascii_lowercase + string.digits
    for length in range(1, max_length + 1):
        for attempt in itertools.product(chars, repeat=length):
            guess = ''.join(attempt)
            if guess == target:
                return guess
    return None

# केवल डेमो के लिए बहुत छोटा पासवर्ड
print(brute_force_password("ab1", 3))

टीम पेयरिंग

players = ['Alice', 'Bob', 'Charlie', 'David']

# सभी संभावित मैच (कॉम्बिनेशन - क्रम नहीं)
matches = list(combinations(players, 2))
print("संभावित मैच:")
for m in matches:
    print(f"  {m[0]} vs {m[1]}")

# टूर्नामेंट शेड्यूल (पर्म्यूटेशन - क्रम मायने रखता है यदि होम/अवे)
schedule = list(permutations(players, 2))
print(f"\nकुल शेड्यूल स्लॉट्स: {len(schedule)}")

लॉटरी नंबर जनरेटर

import random
from itertools import combinations

# 1-49 से 6 नंबर चुनें
all_combos = list(combinations(range(1, 50), 6))
print(f"कुल संभावनाएं: {len(all_combos):,}")  # 13,983,816

# रैंडम टिकट
winning = sorted(random.sample(range(1, 50), 6))
print(f"विजेता नंबर: {winning}")

अन्य उपयोगी itertools फंक्शन्स

फंक्शनविवरण
product(*iterables, repeat=1)कार्टेशियन प्रोडक्ट (नेस्टेड लूप्स)
permutations(iterable, r)क्रमबद्ध व्यवस्थाएं
combinations(iterable, r)अक्रमबद्ध चयन
combinations_with_replacement(iterable, r)दोहराव के साथ चयन

प्रदर्शन नोट

  • ये फंक्शन्स इटरेटर्स लौटाते हैं - मेमोरी कुशल
  • बड़े परिणामों के लिए list() न करें, सीधे इटरेट करें
  • math.comb(n, k) और math.perm(n, k) (पायथन 3.8+) केवल काउंट के लिए
import math
print(math.comb(49, 6))   # 13983816 - कॉम्बिनेशन्स काउंट
print(math.perm(6, 2))    # 30 - पर्म्यूटेशन्स काउंट
  1. - MongoDB और Python

    MongoDB एक व्यापक रूप से उपयोग किया जाने वाला डॉक्यूमेंट डेटाबेस है जो NoSQL DB का एक रूप भी है। Python कुछ पायथन मॉड्यूल्स के माध्यम से MongoDB के साथ इंटरैक्ट कर सकता है और Mongo DB के अंदर डेटा बना और मैनिपुलेट कर सकता है। इस लेख में हम इसे करना सीखेंगे। लेकिन MongoDB आपके सिस्टम में पहले से उपल

  1. C++ में कॉम्बिनेशन और पर्मुटेशन कैसे कैलकुलेट करें? C++ में कॉम्बिनेशन और पर्मुटेशन कैसे कैलकुलेट करें?

    कॉम्बिनेशन और पर्मुटेशन कॉम्बिनेटोरिक्स का हिस्सा हैं। पर्मुटेशन वे विभिन्न व्यवस्थाएं हैं जो एलिमेंट्स का एक सेट बना सकता है यदि एलिमेंट्स को एक समय में, कुछ समय में या सभी समय में लिया जाए। कॉम्बिनेशन एलिमेंट्स को चुनने के विभिन्न तरीके हैं यदि एलिमेंट्स को एक समय में, कुछ समय में या सभी समय में ल

  1. पायथन में सहसंबंध और रिग्रेशन पायथन में सहसंबंध और रिग्रेशन

    सहसंबंध दो डेटा सेट के बीच निर्भरता वाले कुछ सांख्यिकीय संबंधों को संदर्भित करता है। जबकि रैखिक प्रतिगमन एक रैखिक दृष्टिकोण है जो एक आश्रित चर और एक या अधिक स्वतंत्र चर के बीच संबंध स्थापित करता है। एकल स्वतंत्र चर को रैखिक प्रतिगमन कहा जाता है जबकि एकाधिक स्वतंत्र चर को बहु प्रतिगमन कहा जाता है। स