แนวคิด
หา sublist (แถว) ที่สมาชิกเรียงตัวเป็นเลขคณิต (Arithmetic Sequence) คือ ความต่างระหว่างสมาชิกติดกันทุกคู่เท่ากัน เช่น [11, 12, 13] diff = 1
ตัวอย่างโค้ด
my_list = [[31, 27, 10], [8, 11, 12], [11, 12, 13], [6, 9, 10]]
print("ลิสต์ต้นฉบับ:", my_list)
my_result = []
for row in my_list:
if len(row) < 2:
continue # ข้ามแถวที่มีสมาชิกน้อยกว่า 2
diff = row[1] - row[0]
is_arithmetic = True
for i in range(1, len(row) - 1):
if row[i+1] - row[i] != diff:
is_arithmetic = False
break
if is_arithmetic:
my_result.append(row)
print("แถวที่เป็นเลขคณิต:", my_result)
ผลลัพธ์
ลิสต์ต้นฉบับ: [[31, 27, 10], [8, 11, 12], [11, 12, 13], [6, 9, 10]]
แถวที่เป็นเลขคณิต: [[11, 12, 13]]
คำอธิบาย
- คำนวณ diff จากคู่แรก
row[1] - row[0] - ตรวจสอบคู่ถัดไปทุกคู่ว่าตรงกับ diff เดียวกันหรือไม่
- ใช้ flag
is_arithmeticและbreakเพื่อหยุดเร็วเมื่อพบไม่ตรง
เวอร์ชัน Pythonic ด้วย all()
my_result = [
row for row in my_list
if len(row) >= 2 and all(row[i+1] - row[i] == row[1] - row[0] for i in range(len(row)-1))
]