หัดเขียน Python การอ้าง index และการ slice ใน element
ในการอ้าง index หรือ element ในภาษา python นั้นมีความผิดแตกต่างกับภาษาอื่นมากพอสมควร ใน python ไม่ว่าจะเป็น array , list, tuple ชนิดข้อมูลที่เป็นชุดเรียกต่อกันจะใช้การอ้างอิง index และการตัด Slicing แบบเดียวกันคือใช้ การอ้างอิงใน [] นั้นเองเรามาดูตัวอย่างโค้ดกันเลยดีกว่า
phonelist = ['iphonex', 'galaxy', 'vivo', 'nexus'] name = 'thaicoding' #Indexing or 'Subscription' operation # print('Item 0 is', phonelist[0]) print('Item 1 is', phonelist[1]) print('Item 3 is', phonelist[3]) print('Item -1 is', phonelist[-1]) print('Item -2 is', phonelist[-2]) print('Character 0 is ', name[0]) print('Character -10 is ', name[-10])
ผลลัพธ์การรันโปรแกรม
จากผลลัพธ์จะเห็นว่าการอ้างอิง index นั้นจะเริ่มจาก 0 เหมือนกับภาษาใน C Family ซึ่งค่าที่ได้ก็เป็นไปตามชนิดข้อมูลของตัวแปรนั้น อย่างตัวแปร phonelist จะเก็บข้อความหลายๆอันจึง return ค่าออกมาเป็นข้อความตาม index เลย ส่วนตัวแปร name นั้นจะเก็บเป็นข้อความอยู่แล้ว เหมือนอ้างอิง index ที่ 0 จึง return ค่าตัวอักษร t ออกมา แต่ใน python นั้นจะมีการอ้างอิง index ที่เป็น – ซึ่งการทำงานของมันนั้นจะนับถอยหลัง โดยที่ -1 จะเป็นตัวสุดท้ายของชุดข้อมูล
จากรูปการอ้างอิง index และผลลัพธ์การรันโปรแกรมจะเห็นว่า index 0 กับ index -10 ของตัวแปร name จะ return ค่าตัว t ออกมาเหมือนกัน นั้นคือ index ติดลบนั้นจะเป็นการนับถอยหลังโดยเริ่มจาก -1 ตัวสุดท้ายของข้อมูลจนถึงตัวแรกสุดของข้อมูล
ต่อมาจะเป็นตัวอย่างการ slice list หรือชุดข้อมูล มาดูตัวอย่างโค้ดกันเลยครับ
phonelist = ['iphonex', 'galaxy', 'vivo', 'nexus'] name = 'thaicoding' #Slicing on a list print('Item 1 to 3 is ', phonelist[1:3]) print('Item 2 to end is ', phonelist[2:]) print('Item 1 to -1 is ', phonelist[1:-1]) print('Item start to end is', phonelist[:])
ผลลัพธ์การรันโปรแกรม
การตัดช่วงของ index นั้นจะเป็นการกำหนดจุดเริ่มต้น แล้วคั่นด้วย : แล้วจุดหยุด ซึ่งจุดหยุดนี้จะเป็น index ที่หยุดแล้วไม่เอาค่าตรงตำแหน่งมากซึ่งจะแปลกจากภาษาอื่นเล็กน้อย จากตัวอย่างจะเห็นว่า ตัดช่วง [1:3] ของตัวแปร phonelist จะได้ตำแหน่งที่ 1 กับ 2 มา เพราะเริ่มที่ 1 และหยุด ที่ 3 โดยตรงตำแหน่งที่ 3 คือข้อความว่า nexus จะไม่เอามาด้วยแต่ละจบแค่ vivo เท่านั้น ซึ่งนอกจากนี้ยังสามารถใช้ค่า index ที่เป็นลบเพื่ออ้างอิงจากด้านหลังมาด้านหน้าได้อีกด้วย เช่นจากตัวอย่าง phonelist[1:-1] เริ่มที่ตำแหน่ง 1 แล้วหยุดที่ -1 คือตัวสุดท้ายค่าที่ได้ก็จะเป็น galaxy, vivo เพราะหยุดที่ตัวสุดท้ายจึงได้แค่ค่ารองสุดท้ายมาคือ vivo นั้นเอง
ต่อมาจะเป็นอีกตัวอย่างคือการ slice ตัวแปรชนิดที่เป็น string ซึ่งจะได้ string ที่ถูกตัดตามช่วงที่กำหนด มาดูโค้ดตัวอย่างกันครับ
phonelist = ['iphonex', 'galaxy', 'vivo', 'nexus'] name = 'thaicoding' #Slicing on a string # print('characters 1 to 3 is ', name[1:3]) print('characters 2 to end is', name[2:]) print('characters 1 to -1 is', name[1:-1]) print('characters start to end is ', name[:])
ผลลัพธ์การรันโปรแกรม
จากผลลัพธ์จะเห็นว่าหลักการคล้ายกับตัวอย่างก่อนหน้านี้เพียงแต่แค่เป็นการตัดคำเท่านั้น
โค้ดตัวอย่างทั้งหมด
phonelist = ['iphonex', 'galaxy', 'vivo', 'nexus'] name = 'thaicoding' #Indexing or 'Subscription' operation # print('Item 0 is', phonelist[0]) print('Item 1 is', phonelist[1]) print('Item 3 is', phonelist[3]) print('Item -1 is', phonelist[-1]) print('Item -2 is', phonelist[-2]) print('Character 0 is ', name[0]) print('Character -10 is ', name[-10]) #Slicing on a list print('Item 1 to 3 is ', phonelist[1:3]) print('Item 2 to end is ', phonelist[2:]) print('Item 1 to -1 is ', phonelist[1:-1]) print('Item start to end is', phonelist[:]) #Slicing on a string # print('characters 1 to 3 is ', name[1:3]) print('characters 2 to end is', name[2:]) print('characters 1 to -1 is', name[1:-1]) print('characters start to end is ', name[:])