เรียน Python: ความเจ๋งของการ Swap ค่าที่ภาษาอื่นหลายภาษายังต้องอิจฉา

หลายคนที่เริ่มเรียน Python หลังจากเคยเขียน C, Java หรือ JavaScript มักจะมีโมเมนต์ "อ้าว ทำแบบนี้ได้ด้วยเหรอ?"

หนึ่งในฟีเจอร์ที่เรียบง่ายแต่ทรงพลังที่สุดคือ การสลับค่า (Swap)

สมัยก่อนต้องเขียนแบบนี้

ในหลายภาษา การสลับค่าระหว่างตัวแปรสองตัวต้องใช้ตัวแปรชั่วคราว

a = 10
b = 20

temp = a
a = b
b = temp

print(a, b)

ผลลัพธ์

20 10

Python ทำได้ในบรรทัดเดียว

a = 10
b = 20

a, b = b, a

print(a, b)

ผลลัพธ์

20 10

ดูเหมือนเวทมนตร์ แต่จริง ๆ แล้ว Python ใช้แนวคิดที่เรียกว่า Tuple Packing / Unpacking

Python จะสร้างค่า

(b, a)

ขึ้นมาก่อน

แล้วค่อยกระจายค่ากลับไปยัง

a, b

ดังนั้นจึงไม่เกิดปัญหาที่ค่าถูกเขียนทับระหว่างทาง


Swap ได้หลายตัวพร้อมกัน

ไม่ใช่แค่ 2 ตัว

a = 1
b = 2
c = 3

a, b, c = c, a, b

print(a, b, c)

ผลลัพธ์

3 1 2

Swap ค่าใน List ได้เลย

หลายภาษาอาจต้องเขียนแบบนี้

temp = numbers[0]
numbers[0] = numbers[1]
numbers[1] = temp

แต่ Python เขียนได้สั้นกว่า

numbers = [10, 20, 30]

numbers[0], numbers[1] = numbers[1], numbers[0]

print(numbers)

ผลลัพธ์

[20, 10, 30]

ใช้ใน Sorting Algorithm ได้สวยมาก

ตัวอย่าง Bubble Sort

numbers = [5, 3, 8, 1]

for i in range(len(numbers)):
for j in range(len(numbers)-1):
if numbers[j] > numbers[j+1]:
numbers[j], numbers[j+1] = \
numbers[j+1], numbers[j]

print(numbers)

แทนที่จะต้องประกาศ

temp

ทุกครั้งที่สลับค่า


Swap Object ก็ได้

user1 = {"name": "Alice"}
user2 = {"name": "Bob"}

user1, user2 = user2, user1

print(user1)
print(user2)

ผลลัพธ์

{'name': 'Bob'}
{'name': 'Alice'}

Python สลับ Reference ให้ทันที


Swap แถวใน Matrix

matrix = [
[1, 2],
[3, 4]
]

matrix[0], matrix[1] = matrix[1], matrix[0]

print(matrix)

ผลลัพธ์

[
[3, 4],
[1, 2]
]

ความลับเบื้องหลัง

หลายคนคิดว่า Python ต้องสร้างตัวแปรลับชื่อ temp

แต่จริง ๆ แล้ว Python ใช้ bytecode สำหรับ unpacking โดยตรง

a, b = b, a

มีประสิทธิภาพมากกว่าที่คิด และเป็นรูปแบบมาตรฐานที่ Python Programmer ใช้กันทั่วโลก


ตัวอย่างที่คนเห็นครั้งแรกมักร้อง "ว้าว"

Rotate 3 ค่า

a, b, c = 1, 2, 3

a, b, c = b, c, a

print(a, b, c)

ผลลัพธ์

2 3 1

Reverse คู่ข้อมูล

left, right = right, left

Swap ค่าใน Dictionary

scores = {
"A": 100,
"B": 90
}

scores["A"], scores["B"] = \
scores["B"], scores["A"]

print(scores)

ผลลัพธ์

{'A': 90, 'B': 100}

ทำไมฟีเจอร์นี้ถึงสำคัญ

การ Swap อาจดูเป็นเรื่องเล็ก แต่เป็นตัวอย่างที่สะท้อนปรัชญาของ Python ได้ดีมาก

"Simple is better than complex."

โค้ดที่เคยต้องเขียน 3-4 บรรทัด เหลือเพียงบรรทัดเดียว อ่านง่าย ลดโอกาสเกิด Bug และทำให้ Programmer โฟกัสกับปัญหาจริง ๆ มากกว่ารายละเอียดจุกจิกของภาษา

และนี่เป็นเพียงหนึ่งในหลาย ๆ ฟีเจอร์ที่ทำให้หลายคนเริ่มเรียน Python แล้วไม่อยากกลับไปเขียนภาษาเดิมอีกเลยครับ

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

รับติดตั้งระบบป้ายโฆษณาดิจิตอล Digital Signage ตั้งเวลาทำงานและควบคุมผ่าน Internet ได้

แจกฟรี ระบบแสดงคิวงาน สำหรับร้านนวด สปา หรือ ร้านทำผม

บริการออกแบบ Character Agent สำหรับธุรกิจ

ป้ายดิจิตอลที่โต้ตอบได้