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

पायथन में एक लाइन में दो वेरिएबल्स स्वैप करना

पायथन में दो वेरिएबल्स को स्वैप करना अत्यंत सरल है - टपल अनपैकिंग का उपयोग करके एक ही लाइन में:

मानक तरीका

a = 20
b = 30

print(f"स्वैप से पहले: a={a}, b={b}")  # a=20, b=30

# एक लाइन में स्वैप
a, b = b, a

print(f"स्वैप के बाद: a={a}, b={b}")   # a=30, b=20

यह कैसे काम करता है?

पायथन मूल्यांकन क्रम:

  1. दायां पक्ष पहले मूल्यांकित होता है: b, a एक टपल (30, 20) बनाता है
  2. टपल मेमोरी में बनता है असाइनमेंट से पहले
  3. बायां पक्ष अनपैक होता है: टपल के एलिमेंट्स क्रमशः a और b को असाइन होते हैं

चरण-दर-चरण

# a=20, b=30
# चरण 1: दायां पक्ष मूल्यांकन
temp_tuple = (b, a)  # (30, 20) - नया टपल ऑब्जेक्ट

# चरण 2: बायां पक्ष अनपैकिंग
a = temp_tuple[0]    # a = 30
b = temp_tuple[1]    # b = 20

# चरण 3: temp_tuple गार्बेज कलेक्टेड (यदि कोई रेफरेंस नहीं)

तीन या अधिक वेरिएबल्स स्वैप करना

a, b, c = 1, 2, 3
print(f"पहले: a={a}, b={b}, c={c}")  # 1, 2, 3

# साइक्लिक स्वैप: a→b, b→c, c→a
a, b, c = b, c, a
print(f"बाद: a={a}, b={b}, c={c}")   # 2, 3, 1

# रिवर्स
a, b, c = c, b, a
print(f"रिवर्स: a={a}, b={b}, c={c}") # 1, 3, 2

व्यावहारिक उपयोग

सॉर्टिंग एल्गोरिदम में

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                # स्वैप
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

print(bubble_sort([64, 34, 25, 12, 22, 11, 90]))

फिबोनैकी संख्या

def fibonacci(n):
    a, b = 0, 1
    for _ in range(n):
        yield a
        a, b = b, a + b  # सुंदर स्वैप + जोड़

print(list(fibonacci(10)))  # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

क्विकसॉर्ट पार्टीशन

def partition(arr, low, high):
    pivot = arr[high]
    i = low - 1
    for j in range(low, high):
        if arr[j] <= pivot:
            i += 1
            arr[i], arr[j] = arr[j], arr[i]  # स्वैप
    arr[i+1], arr[high] = arr[high], arr[i+1]
    return i + 1

अन्य भाषाओं से तुलना

भाषास्वैप कोड
पायथनa, b = b, a
C/C++/Javatemp = a; a = b; b = temp;
JavaScript[a, b] = [b, a] (ES6) या temp
Goa, b = b, a
Ruststd::mem::swap(&mut a, &mut b)

सावधानियां

  • यह रेफरेंस स्वैप है, मानों का डीप कॉपी नहीं
  • म्यूटेबल ऑब्जेक्ट्स के लिए, रेफरेंस बदलते हैं, ऑब्जेक्ट नहीं
  • काम्प्लेक्स एक्सप्रेशन्स में पठनीयता के लिए अस्थायी वेरिएबल बेहतर हो सकता है
# म्यूटेबल ऑब्जेक्ट्स के साथ
list1 = [1, 2]
list2 = [3, 4]
list1, list2 = list2, list1
# list1 अब [3,4] को संदर्भित करता है, list2 [1,2] को
# मूल लिस्ट ऑब्जेक्ट्स अपरिवर्तित

निष्कर्ष

पायथन का टपल अनपैकिंग a, b = b, a स्वैप करने का सबसे सुंदर, पठनीय और कुशल तरीका है - कोई अस्थायी वेरिएबल आवश्यक नहीं!

  1. Python के Matplotlib का उपयोग करके स्कैटर प्लॉट में रेखा जोड़ना Python के Matplotlib का उपयोग करके स्कैटर प्लॉट में रेखा जोड़ना

    Python के Matplotlib का उपयोग करके स्कैटर प्लॉट में रेखा जोड़ने के लिए, हम निम्नलिखित चरण ले सकते हैं: फिगर आकार सेट करें और सबप्लॉट के बीच और आसपास पैडिंग समायोजित करें। डेटा बिंदुओं की संख्या के लिए एक चर, n, आरंभ करें। scatter() मेथड का उपयोग करके x और y डेटा बिंदु प्लॉट करें। plot() मे

  1. Python में स्कैटर प्लॉट पर लाइन कैसे ओवरप्लॉट करें? Python में स्कैटर प्लॉट पर लाइन कैसे ओवरप्लॉट करें?

    सबसे पहले, हम scatter मेथड का उपयोग करके विभिन्न डेटा बिंदुओं के लिए स्कैटर बना सकते हैं, और फिर plot मेथड का उपयोग करके लाइन प्लॉट कर सकते हैं। चरण figure() मेथड का उपयोग करके आकार (4, 3) के साथ एक नया चित्र बनाएं, या मौजूदा चित्र को सक्रिय करें। plt.axes() का उपयोग करके वर्तमान चित्र में एक अक्ष

  1. Python का उपयोग करके दो प्लॉट्स को साथ-साथ कैसे बनाएं? Python का उपयोग करके दो प्लॉट्स को साथ-साथ कैसे बनाएं?

    subplot(row, col, index) मेथड का उपयोग करके, हम एक फिगर को row*col भागों में विभाजित कर सकते हैं, और index पोजीशन पर फिगर प्लॉट कर सकते हैं। निम्नलिखित प्रोग्राम में, हम एक ही फिगर में दो डायग्राम बनाएंगे।चरणNumPy का उपयोग करके x, y1, y2 पॉइंट्स बनाना।nrows = 1, ncols = 2, index = 1 के साथ, subplot(