Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Swap ตัวแปรสองตัวในบรรทัดเดียวใน Python

ใน Python การ Swap ตัวแปรสองตัวทำได้ง่ายมากในบรรทัดเดียว ไม่ต้องใช้ Temporary Variable

วิธีมาตรฐาน (Pythonic Way)

>>> a = 20
>>> b = 30
>>> a, b = b, a
>>> a
30
>>> b
20

การทำงานเบื้องหลัง (Mechanism)

  1. Evaluate Right-hand Side ก่อน: b, a ถูกประเมิน สร้าง Tuple (30, 20) ใน Memory
  2. Tuple Packing: ค่าของ b และ a (ก่อน Swap) ถูก Pack เป็น Tuple
  3. Evaluate Left-hand Side: a, b เป็น Targets สำหรับ Unpacking
  4. Tuple Unpacking: Tuple ถูก Unpack เรียงลำดับ Element แรก → a, Element ที่สอง → b

เกิดขึ้นแบบ Atomic (พร้อมกัน) ไม่มี Intermediate State ที่ a และ b มีค่าเดิมคู่กัน

ขยายไป Swap หลายตัวแปร

# Rotate 3 Variables
a, b, c = 1, 2, 3
a, b, c = b, c, a
print(a, b, c)  # 2 3 1

# Swap ใน List
lst = [1, 2, 3, 4]
lst[0], lst[3] = lst[3], lst[0]
print(lst)  # [4, 2, 3, 1]

เปรียบเทียบกับภาษาอื่น

LanguageSwap Syntax
Pythona, b = b, a
C/C++/Javatemp = a; a = b; b = temp;
JavaScript (ES6)[a, b] = [b, a]
Goa, b = b, a
Rubya, b = b, a

Use Cases ทั่วไป

# 1. Swap Values
x, y = y, x

# 2. Return Multiple Values แล้ว Unpack
def min_max(lst):
    return min(lst), max(lst)

minimum, maximum = min_max([3, 1, 4, 1, 5])

# 3. Simultaneous Update (Fibonacci)
a, b = 0, 1
for _ in range(10):
    a, b = b, a + b  # Fibonacci Sequence

# 4. Reverse ใน List (Two-pointer)
left, right = 0, len(lst) - 1
while left < right:
    lst[left], lst[right] = lst[right], lst[left]
    left += 1
    right -= 1

ข้อควรระวัง

  • Right-hand Side ประเมินครบก่อน Left-hand Side ใดๆ
  • จำนวน Variables ทั้งสองข้างต้องเท่ากัน (ValueError หากไม่เท่ากัน)
  • ทำงานกับ Iterable ใดๆ ที่ Unpack ได้ (Tuple, List, Generator)