Python ตอนที่ 68 การเปลี่ยนแปลงข้อมูลใน List

ถ้าต้องการเปลี่ยนแปลงข้อมูลใน List สามารถทำได้โดยการระบุอินเด็กซ์ของข้อมูลที่ต้องการเปลี่ยน เช่น

list[0] = "iPod"

หมายถึง การกำหนดค่าให้ข้อมูลตัวแรก (อินเด็กซ์ 0) ใน List มีค่าเท่ากับ “iPod”

มาดูตัวอย่างกันดีกว่า

stock = ['iPhone', 'iPad', 'iPod', 'Samsung', 'Vivo', 'Wiko', 'Nokia', 'Oppo']

print("ข้อมูลก่อนการเปลี่ยนแปลง : ")
print(stock)

stock[4] = "Asus"

print("ข้อมูลหลังการเปลี่ยนแปลง : ")
print(stock)
  • บรรทัดที่ 6 กำหนดให้ข้อมูลลำดับที่ 5 (อินเด็กซ์ 4) ซึ่งค่าเดิมคือ “Vivo” เปลี่ยนเป็น “Asus”

ผลลัพธ์

ข้อมูลก่อนการเปลี่ยนแปลง :
[‘iPhone’, ‘iPad’, ‘iPod’, ‘Samsung’, ‘Vivo’, ‘Wiko’, ‘Nokia’, ‘Oppo’]
ข้อมูลหลังการเปลี่ยนแปลง :
[‘iPhone’, ‘iPad’, ‘iPod’, ‘Samsung’, ‘Asus’, ‘Wiko’, ‘Nokia’, ‘Oppo’]

การเปลี่ยนแปลงข้อมูลแบบช่วง

นอกจากการเปลี่ยนแปลงข้อมูลทีละตัวแล้ว เรายังสามารถเปลี่ยนแปลงข้อมูลใน List ทีละหลาย ๆ ตัวได้โดยการเปลี่ยนแปลงแบบกำหนดอินเด็กซ์เป็นช่วง ซึ่งมีขั้นตอนคือ

  1. สร้าง List สำหรับข้อมูลที่ต้องการนำมาแทนที่ข้อมูลใน List ต้นทาง
  2. กำหนดให้แทนที่ข้อมูลใน List ต้นทางเป็นแบบช่วง

ดังแนวทางต่อไปนี้

list[2:5] = ["iPhone", "iPad", "iPod"]

หมายถึง การนำค่าจากลิสต์ด้านขวาไปแทนที่ค่าในลิสต์ต้นทางตั้งแต่ลำดับที่ 3 (อินเด็กซ์ 2) ไปจนถึงลำดับที่ 5 (อินเด็กซ์ 4) (เราระบุอินเด็กซ์สิ้นสุดเป็น 5 แต่อินเด็กซ์ 5 จะไม่ถูกรวมเข้าด้วย ดังนั้นจึงได้อินเด็กซ์ 4)

เพื่อความเข้าใจมากขึ้น มาดูตัวอย่างกันดีกว่า

stock = ['iPhone', 'iPad', 'iPod', 'Samsung', 'Vivo', 'Wiko', 'Surface']

print("ข้อมูลก่อนการเปลี่ยนแปลง : ")
print(stock)

my_list = ["iMac", "MacBook Pro", "MacBook Air"]
stock[3:6] = my_list

print("ข้อมูลหลังการเปลี่ยนแปลง : ")
print(stock)
  • บรรทัดที่ 6 สร้างข้อมูลแบบ List ขึ้นมาใหม่ โดยมีสมาชิก 3 ตัว
  • บรรทัดที่ 7 กำหนดให้นำข้อมูลจาก List ที่สร้างขึ้นใหม่ ไปแทนที่ข้อมูลใน List ต้นทาง ตั้งแต่ลำดับที่ 4 (อินเด็กซ์ 3) ไปจนถึงลำดับที่ 6 (อินเด็กซ์ 5 (6 ลบ 1))

ผลลัพธ์

ข้อมูลก่อนการเปลี่ยนแปลง :
[‘iPhone’, ‘iPad’, ‘iPod’, ‘Samsung’, ‘Vivo’, ‘Wiko’, ‘Surface’]
ข้อมูลหลังการเปลี่ยนแปลง :
[‘iPhone’, ‘iPad’, ‘iPod’, ‘iMac’, ‘MacBook Pro’, ‘MacBook Air’, ‘Surface’]

อย่างไรก็ตาม ถ้าข้อมูลใน List ที่เรานำไปแทนที่ข้อมูลในลิสต์ต้นทาง มีจำนวนมากกว่าช่วงข้อมูลที่เรากำหนดให้แทนที่ในลิสต์ต้นทาง ข้อมูลในลิสต์ปลายทางจะถูกแทรกลงไปในลิสต์ต้นทางทั้งหมด ส่วนข้อมูลที่เหลือในลิสต์ต้นทางก็จะถูกขยับลำดับออกไป

ดังตัวอย่าง

stock = ['iPhone', 'iPad', 'iPod', 'Samsung', 'Vivo', 'Wiko', 'Surface']

print("ข้อมูลก่อนการเปลี่ยนแปลง : ")
print(stock)

my_list = ["iMac", "MacBook Pro", "MacBook Air", "Mac Pro"]
stock[3:6] = my_list

print("ข้อมูลหลังการเปลี่ยนแปลง : ")
print(stock)

จากโค้ดตัวอย่าง บรรทัดที่ 6-7 ข้อมูลในลิสต์ปลายทางมี 4 ตัว แต่เรากำหนดช่วงข้อมูลที่จะให้แทนที่ในลิสต์ต้นทางเป็นอินเด็กซ์ 3 ถึงอินเด็กซ์ 5 (6 ลบ 1) เท่ากับว่า ให้แทนที่ข้อมูลลำดับที่ 4 ถึง 6 ซึ่งเป็นข้อมูลจำนวน 3 ตัว เห็นได้ว่า ข้อมูลที่จะไปแทนที่ มีจำนวนมากกว่าข้อมูลที่จะถูกแทนที่

ในกรณีแบบนี้ Python จะนำข้อมูลจากลิสต์ปลายทางทั้งหมดไปแทรกลงในลิสต์ต้นทาง โดยที่ข้อมูลลำดับถัดจากข้อมูลที่ถูกแทนที่ก็ไม่ได้หายไปไหน แต่จะขยับลำดับออกไป

ผลลัพธ์

ข้อมูลก่อนการเปลี่ยนแปลง :
[‘iPhone’, ‘iPad’, ‘iPod’, ‘Samsung’, ‘Vivo’, ‘Wiko’, ‘Surface’]
ข้อมูลหลังการเปลี่ยนแปลง :
[‘iPhone’, ‘iPad’, ‘iPod’, ‘iMac’, ‘MacBook Pro’, ‘MacBook Air’, ‘Mac Pro’, ‘Surface’]

ในทางตรงกันข้าม ถ้าข้อมูลในลิสต์ที่จะนำไปแทนที่ มีจำนวนน้อยกว่าจำนวนข้อมูลที่ถูกกำหนดให้ถูกแทนที่ในลิสต์ต้นทาง Python ก็จะนำข้อมูลในลิสต์ปลายทางเท่าที่มี ไปแทนที่ข้อมูลในลิสต์ต้นทางตามจำนวนที่ระบุเป็นช่วง แล้วข้อมูลที่เหลือก็จะถูกขยับลำดับเข้ามา

เช่น ถ้าลิสต์ปลายทางมีข้อมูล 2 ตัว และถูกกำหนดให้นำไปแทนที่ข้อมูลในลิสต์ต้นทางจำนวน 3 ตัว Python ก็จะนำข้อมูล 2 ตัวนี่แหละ ไปแทนที่ข้อมูลทั้ง 3 ตัวนั้น (ข้อมูล 3 ตัวในลิสต์ต้นทางจหายไปหมด)

ยิ่งอธิบายยิ่งงง มาดูตัวอย่างกันดีกว่าครับ

stock = ['iPhone', 'iPad', 'iPod', 'Samsung', 'Vivo', 'Wiko', 'Surface']

print("ข้อมูลก่อนการเปลี่ยนแปลง : ")
print(stock)

my_list = ["iMac", "MacBook Pro"]
stock[3:6] = my_list

print("ข้อมูลหลังการเปลี่ยนแปลง : ")
print(stock)

ผลลัพธ์

ข้อมูลก่อนการเปลี่ยนแปลง :
[‘iPhone’, ‘iPad’, ‘iPod’, ‘Samsung’, ‘Vivo’, ‘Wiko’, ‘Surface’]
ข้อมูลหลังการเปลี่ยนแปลง :
[‘iPhone’, ‘iPad’, ‘iPod’, ‘iMac’, ‘MacBook Pro’, ‘Surface’]

การแทรกข้อมูลในลิสต์

นอกจากการแทนที่ข้อมูลในลิสต์แล้ว เรายังสามารถแทรกข้อมูลในลิสต์ได้ด้วย โดยการใช้เมธอด insert()โดยมีรูปแบบการใช้งานดังนี้

list.insert(index,value)
  • index คือลำดับอินเด็กซ์ที่ต้องการแทรกข้อมูลใหม่เข้าไป
  • value คือค่าที่ต้องการแทรกในอินเด็กซ์ที่ระบุ

ข้อแตกต่างระหว่างการแทนที่ข้อมูลกับการแทรกข้อมูลคือ

  • การแทนที่ข้อมูล จะทำให้ข้อมูลเดิมหายไป เพราะถูกแทนที่ด้วยข้อมูลใหม่
  • การแทรกข้อมูล เป็นการนำข้อมูลใหม่เพิ่มเข้าไปในลิสต์ ข้อมูลเดิมยังคงอยู่ แต่จะมีการเปลี่ยนแปลงลำดับเพราะถูกแทรก

ตัวอย่างการแทรกข้อมูลในลิสต์ด้วยเมธอด insert()

stock = ['iPhone', 'iPad', 'iPod']

print("ข้อมูลก่อนการเปลี่ยนแปลง : ")
print(stock)

stock.insert(1, "iMac")

print("ข้อมูลหลังการเปลี่ยนแปลง : ")
print(stock)
  • บรรทัดที่ 6 สั่งให้แทรกคำว่า “iMac” เข้าไปในอินเด็กซ์ 1 (ลำดับที่ 2) ของลิสต์ต้นทาง

ผลลัพธ์

ข้อมูลก่อนการเปลี่ยนแปลง :
[‘iPhone’, ‘iPad’, ‘iPod’]
ข้อมูลหลังการเปลี่ยนแปลง :
[‘iPhone’, ‘iMac’, ‘iPad’, ‘iPod’]

ถ้าเราระบุอินเด็กซ์เกินจำนวนข้อมูลที่มีอยู่จริงในลิสต์ ข้อมูลจะถูกแทรกเข้าไปในลำดับสุดท้ายของลิสต์

stock = ['iPhone', 'iPad', 'iPod']

print("ข้อมูลก่อนการเปลี่ยนแปลง : ")
print(stock)

stock.insert(8, "iMac")

print("ข้อมูลหลังการเปลี่ยนแปลง : ")
print(stock)
  • บรรทัดที่ 6 สั่งให้แทรกคำว่า “iMac” เข้าไปในอินเด็กซ์ 8 คือลำดับที่ 9 ของลิสต์ต้นทาง แต่ความจริงข้อมูลในลิสต์ต้นทางมีเพียง 3 ตัว (ถึงอินเด็กซ์ 2) เท่านั้น ผลลัพธ์คือ ข้อมูลจะถูกแทรกไว้ที่ลำดับสุดท้ายของอินเด็กซ์ต้นทาง

ผลลัพธ์

ข้อมูลก่อนการเปลี่ยนแปลง :
[‘iPhone’, ‘iPad’, ‘iPod’]
ข้อมูลหลังการเปลี่ยนแปลง :
[‘iPhone’, ‘iPad’, ‘iPod’, ‘iMac’]