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

Modulo ของ Tuple Elements ใน Python

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()
  • เก็บผลลัพธ์และแสดง

การคำนวณแบบละเอียด

IndexTuple 1 (Dividend)Tuple 2 (Divisor)Moduloคำนวณ
067996767 ÷ 99 = 0 เหลือ 67
1451234545 ÷ 123 = 0 เหลือ 45
23410434 ÷ 10 = 3 เหลือ 4
35656056 ÷ 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)