บทความนี้สาธิตวิธีตรวจสอบว่าตำแหน่ง (Index) ขององค์ประกอบในลิสต์เท่ากับค่าขององค์ประกอบนั้นหรือไม่ โดยใช้ enumerate()
โค้ดตัวอย่าง
my_list_1 = [12, 62, 19, 79, 58, 0, 99]
my_list_2 = [12, 74, 19, 54, 58, 0, 11]
check_list = [9, 8, 2]
print(f"List 1: {my_list_1}")
print(f"List 2: {my_list_2}")
print(f"Check List: {check_list}")
# เรียงลำดับก่อน (ตามโค้ดต้นฉบับ)
my_list_1.sort()
my_list_2.sort()
print(f"List 1 เรียงแล้ว: {my_list_1}")
print(f"List 2 เรียงแล้ว: {my_list_2}")
# ตรวจสอบ
my_result = True
for index, element in enumerate(my_list_1):
# เงื่อนไข: ค่าที่ index ต่างกันใน list_1 และ list_2
# และ element อยู่ใน check_list
if my_list_1[index] != my_list_2[index] and element in check_list:
my_result = False
break
print(f"\nผลลัพธ์: {'Index elements เท่ากับ elements ของ list' if my_result else 'Index elements ไม่เท่ากับ elements ของ list'}")
ผลลัพธ์
List 1: [12, 62, 19, 79, 58, 0, 99]
List 2: [12, 74, 19, 54, 58, 0, 11]
Check List: [9, 8, 2]
List 1 เรียงแล้ว: [0, 12, 19, 58, 62, 79, 99]
List 2 เรียงแล้ว: [0, 11, 12, 19, 54, 58, 74]
ผลลัพธ์: Index elements เท่ากับ elements ของ list
อธิบาย Logic
โค้ดนี้ตรวจสอบว่า: "มีตำแหน่งไหนที่ค่าใน list_1 และ list_2 ต่างกัน และค่านั้นอยู่ใน check_list ไหม?"
- หลังเรียง: Index 0: 0 vs 0 (เท่ากัน) ✓
- Index 1: 12 vs 12 (เท่ากัน) ✓
- Index 2: 19 vs 19 (เท่ากัน) ✓
- ... ทุกคู่เท่ากัน จึงไม่เข้าเงื่อนไข False
โค้ดที่อ่านง่ายกว่า
def check_index_value_match(list1, list2, check_values):
"""ตรวจสอบว่ามี Index ไหนที่ list1 != list2 และค่านั้นอยู่ใน check_values"""
for i, (v1, v2) in enumerate(zip(list1, list2)):
if v1 != v2 and v1 in check_values:
return False, i, v1
return True, None, None
# ใช้งาน
ok, idx, val = check_index_value_match(my_list_1, my_list_2, check_list)
print(f"ผ่าน: {ok}")
การประยุกต์ใช้
- Validation ข้อมูล: ตรวจสอบว่าลำดับข้อมูลตรงกับที่คาดหวัง
- Testing: เปรียบเทียบ Expected vs Actual output
- Data Quality Check: หาค่าที่ผิดปกติในตำแหน่งเฉพาะ