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

การสร้างลิสต์ความต่างระหว่างสมาชิกติดกัน (Successive Difference) ใน Python

บทความนี้จะแสดงวิธีหาความต่างระหว่างคู่สมาชิกที่ติดกัน (Successive pairs) ในลิสต์ที่มีเฉพาะตัวเลข

วิธีที่ 1: ใช้ Index และ List Comprehension

ใช้ดัชนี (index) ร่วมกับ range(len(listA) - 1) เพื่อเข้าถึงคู่สมาชิก listA[i] และ listA[i+1]

ตัวอย่าง

listA = [12, 14, 78, 24, 24]
print("Given list:\n", listA)

res = [listA[i + 1] - listA[i] for i in range(len(listA) - 1)]
print("List with successive difference in elements:\n", res)

ผลลัพธ์

Given list: [12, 14, 78, 24, 24]
List with successive difference in elements: [2, 64, -54, 0]

วิธีที่ 2: ใช้ List Slicing และ zip

Slice ลิสต์เป็น 2 ชุด: listA[:-1] (ทุกตัวยกเว้นตัวสุดท้าย) และ listA[1:] (ทุกตัวยกเว้นตัวแรก) แล้ว zip เข้าด้วยกัน

ตัวอย่าง

listA = [12, 14, 78, 24, 24]
print("Given list:\n", listA)

res = [x - y for y, x in zip(listA[:-1], listA[1:])]
print("List with successive difference in elements:\n", res)

ผลลัพธ์

Given list: [12, 14, 78, 24, 24]
List with successive difference in elements: [2, 64, -54, 0]

วิธีที่ 3: ใช้ operator.sub และ map

โมดูล operator มีฟังก์ชัน sub สำหรับการลบ ใช้ร่วมกับ map และ slicing เหมือนวิธีที่ 2

ตัวอย่าง

import operator

listA = [12, 14, 78, 24, 24]
print("Given list:\n", listA)

res = list(map(operator.sub, listA[1:], listA[:-1]))
print("List with successive difference in elements:\n", res)

ผลลัพธ์

Given list: [12, 14, 78, 24, 24]
List with successive difference in elements: [2, 64, -54, 0]

วิธีที่ 2 (zip + slicing) เป็นที่นิยมมากที่สุดเพราะอ่านง่ายและเป็น Pythonic วิธีที่ 3 เหมาะสำหรับผู้ที่ชอบ functional programming