Modulo Operation บน Tuple แบบ Element-wise
เมื่อต้องการหา Modulo (เศษจากการหาร) ของ Tuple สองตัวแบบ Element-wise ใช้ zip() และ Generator Expression พร้อม Operator %
ตัวอย่างโค้ด
my_tuple_1 = (67, 45, 34, 56)
my_tuple_2 = (99, 123, 10, 56)
print("The first tuple is : ")
print(my_tuple_1)
print("The second tuple is : ")
print(my_tuple_2)
# zip จับคู่ แล้ว Modulo (%)
my_result = tuple(elem_1 % elem_2 for elem_1, elem_2 in zip(my_tuple_1, my_tuple_2))
print("The modulus tuple is : ")
print(my_result)
ผลลัพธ์
The first tuple is : (67, 45, 34, 56) The second tuple is : (99, 123, 10, 56) The modulus tuple is : (67, 45, 4, 0)
คำอธิบาย
- กำหนด Tuple 2 ตัว ความยาวเท่ากัน และแสดงผล
- ใช้
zip()จับคู่ Element ที่ Index ตรงกัน - Generator Expression คำนวณ Modulo
elem_1 % elem_2 - แปลงเป็น Tuple ด้วย
tuple() - เก็บผลลัพธ์และแสดง
การคำนวณแบบละเอียด
| Index | Tuple 1 (Dividend) | Tuple 2 (Divisor) | Modulo | คำนวณ |
|---|---|---|---|---|
| 0 | 67 | 99 | 67 | 67 ÷ 99 = 0 เหลือ 67 |
| 1 | 45 | 123 | 45 | 45 ÷ 123 = 0 เหลือ 45 |
| 2 | 34 | 10 | 4 | 34 ÷ 10 = 3 เหลือ 4 |
| 3 | 56 | 56 | 0 | 56 ÷ 56 = 1 เหลือ 0 |
Modulo กับ Negative Numbers
# Python Modulo: sign follows divisor
print(7 % 3) # 1
print(-7 % 3) # 2 (เพราะ -7 = -3*3 + 2)
print(7 % -3) # -2 (เพราะ 7 = -3*-3 + -2)
print(-7 % -3) # -1
กรณีหารด้วยศูนย์
t1 = (10, 20, 30)
t2 = (3, 0, 5)
# จะเกิด ZeroDivisionError
# ป้องกันด้วยเงื่อนไข
result = tuple(a % b if b != 0 else None for a, b in zip(t1, t2))
print(result) # (1, None, 0)
ใช้ NumPy
import numpy as np
t1 = (67, 45, 34, 56)
t2 = (99, 123, 10, 56)
result = tuple(np.mod(t1, t2))
print(result) # (67, 45, 4, 0)
# NumPy จัดการ Divide by Zero ให้ (คืน 0 + Warning)
print(np.mod([10], [0])) # [0] with RuntimeWarning
Operator อื่นๆ แบบ Element-wise
t1 = (10, 20, 30)
t2 = (3, 4, 5)
print(tuple(a + b for a, b in zip(t1, t2))) # Add: (13, 24, 35)
print(tuple(a - b for a, b in zip(t1, t2))) # Sub: (7, 16, 25)
print(tuple(a * b for a, b in zip(t1, t2))) # Mul: (30, 80, 150)
print(tuple(a // b for a, b in zip(t1, t2))) # Floor Div: (3, 5, 6)
print(tuple(a ** b for a, b in zip(t1, t2))) # Power: (1000, 160000, 24300000)