อธิบายอาร์เรย์ใน Python!

Jan 23 2023
หากคุณกำลังเริ่มเขียนโปรแกรมหรือเรียนรู้เกี่ยวกับ Python บทความนี้เหมาะสำหรับคุณ อาร์เรย์เป็นหนึ่งในโครงสร้างข้อมูลที่ใช้มากที่สุด Python แสดงอาร์เรย์อย่างไร เราจะจัดการอาร์เรย์ใน Python เพื่อแก้ปัญหาต่างๆ ได้อย่างไร นี่คือสิ่งที่เรากำลังจะค้นพบในบทความนี้
ภาพหน้าจอการเข้ารหัส

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

คอมพิวเตอร์เก็บข้อมูลอย่างไร?

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

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

นอกจากนี้ยังควรกล่าวถึงด้วยว่าคอมพิวเตอร์ใช้เวลาในการเข้าถึง O(1) เพื่อเข้าถึงที่อยู่หน่วยความจำใดๆ ซึ่งหมายความว่าการเข้าถึงไบต์ #5489637 จะเหมือนกับการเข้าถึงไบต์ #64

อาร์เรย์คืออะไร?

วิธีปฏิบัติทั่วไปในภาษาโปรแกรมคือการใช้ตัวแปรเพื่ออ้างถึงที่อยู่ในหน่วยความจำ เช่น ตัวระบุ X สามารถอ้างถึงไบต์ #32

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

ตัวอย่างเช่น สตริงใน Python ถูกจัดเก็บด้วยวิธีนี้ สมมติว่าคุณประกาศตัวแปรใหม่ด้วยข้อความ 'example' Python จะจัดสรร:

2 ไบต์ (หน่วยความจำที่จำเป็นในการจัดเก็บอักขระ Unicode) * 7 (จำนวนอักขระในตัวอย่างคำ) = 14 ไบต์ของหน่วยความจำที่อยู่ติดกันเพื่อจัดเก็บตัวแปรนี้

อาร์เรย์อ้างอิง

Python ใช้อาร์เรย์อีกประเภทหนึ่งซึ่งเป็นอาร์เรย์อ้างอิง เพื่อทำความเข้าใจ ลองมาดูตัวอย่างนี้ สมมติว่าคุณเป็นเจ้าของโรงแรมและคุณมีห้องพัก 50 ห้อง คุณต้องมีวิธีจัดเก็บชื่อว่าใครพักห้องไหน เป็นตัวแทนดังต่อไปนี้:

รายชื่อ

การทำ Python นี้ต้องเป็นไปตามเงื่อนไขของพื้นที่หน่วยความจำที่อยู่ติดกันเพื่อจัดสรร แต่จะทำอย่างไรเมื่อชื่อมีความยาวต่างกัน (ความยาวต่างกันหมายถึงความต้องการพื้นที่ต่างกัน) ?

ทางออกหนึ่งคือการหาความยาวของสตริงที่ใหญ่ที่สุดและจัดสรรพื้นที่หน่วยความจำให้เพียงพอสำหรับทุกคน แต่สิ่งนี้จะไม่ทำให้หน่วยความจำมีประสิทธิภาพเนื่องจากพื้นที่บางส่วนจะเสียไปและจะเกิดอะไรขึ้นหากมีสตริงใหม่เข้ามาซึ่งตอนนี้เป็นสตริงที่ใหญ่ที่สุด

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

เพื่ออธิบาย สิ่งนี้ ลองดูภาพนี้:

ภาพประกอบของอาร์เรย์อ้างอิง

รายการและทูเพิลใน Python ใช้อาร์เรย์ประเภทนี้เพื่อเก็บข้อมูล

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

อาร์เรย์ขนาดกะทัดรัด

ก่อนหน้านี้เราได้พูดถึง Strings และวิธีที่เราจัดเก็บไว้ในอาร์เรย์ของหน่วยความจำที่อยู่ติดกัน ซึ่งจริงๆ แล้วเราเรียกอาร์เรย์นี้ว่าCompact Array

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

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

สร้างอาร์เรย์ขนาดกะทัดรัดใน python

ที่นี่คุณสังเกตเห็นว่าเราส่งi อาร์กิวเมนต์แรกไปarrayยัง เนื่องจากในการสร้างอาร์เรย์ที่มีขนาดกะทัดรัด เราจำเป็นต้องระบุประเภทสำหรับการจัดสรรหน่วยความจำที่เหมาะสม สำหรับประเภทข้อมูลอื่น ตรวจสอบตารางนี้:

ชนิดข้อมูลในอาร์เรย์

หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับโมดูลอาร์เรย์ คลิกที่นี่

ข้อเสียอย่างหนึ่งของโมดูลอาร์เรย์คือไม่รองรับประเภทข้อมูลที่ผู้ใช้กำหนด อาร์เรย์แบบกระชับที่มี โครงสร้างข้อมูลดังกล่าวสามารถกำหนดได้โดยใช้โมดูลctypes

อาร์เรย์แบบไดนามิก

เมื่อสร้างอาร์เรย์แบบกะทัดรัด เราจะระบุขนาดที่แม่นยำของอาร์เรย์นั้น เพื่อให้คอมพิวเตอร์รู้ว่าต้องจัดสรรหน่วยความจำใด เพราะมันจัดสรรพื้นที่หน่วยความจำข้างเคียงให้กับอาร์เรย์อื่น

ในทางปฏิบัติ เราไม่สามารถรู้ขนาดของอาร์เรย์ของเราได้เสมอไป มันอาจจะขยายใหญ่ขึ้นเมื่อเวลาผ่านไป เพื่อแก้ไขปัญหานี้ Python จัดเตรียมสิ่งที่เป็นนามธรรมที่เรียกว่าDynamic Array

สิ่งที่เป็นนามธรรมนี้ใช้อินสแตนซ์รายการที่รักษาอาร์เรย์พื้นฐานซึ่งมีความจุมากกว่าความยาวของรายการจริง ความสามารถพิเศษนี้ช่วยให้เราสามารถเพิ่มข้อมูลลงในรายการได้มากขึ้น

เมื่อความจุเพิ่มเติมหมดลง ในที่สุด Dynamic Array จะร้องขออาร์เรย์ใหม่ที่ใหญ่ขึ้นและคัดลอกองค์ประกอบทั้งหมดไปยังอาร์เรย์ใหม่ และระบบจะเรียกคืนพื้นที่จากอาร์เรย์เก่า

Python List ขึ้นอยู่กับสิ่งที่เป็นนามธรรมนี้ แต่ Tuples และ Strings นั้นไม่เปลี่ยนรูป (ไม่สามารถเปลี่ยนแปลงได้) ดังนั้นจึงไม่ได้ขึ้นอยู่กับสิ่งนี้

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

รายการ & สิ่งอันดับ

ดังนั้นจากการวิเคราะห์ที่เราทำในส่วนข้างต้น เราสามารถแบ่งเมธอด Lists & Tuples เป็นเมธอดสองประเภท:

วิธีการที่ไม่เปลี่ยนแปลง:วิธีการที่มีอยู่ทั้งในสิ่งอันดับและรายการและไม่เปลี่ยนแปลงเนื้อหา ด้านล่างนี้เป็นตารางของวิธีการเหล่านี้และความซับซ้อนของเวลา:

ความซับซ้อนของวิธีการที่ไม่เปลี่ยนแปลง

วิธีการกลายพันธุ์:วิธีการที่มีอยู่เฉพาะในรายการเมื่อมีการเปลี่ยนแปลงข้อมูลพื้นฐานและโครงสร้างของรายการ ด้านล่างนี้เป็นตารางของวิธีการเหล่านี้และความซับซ้อนของเวลา:

ความซับซ้อนของวิธีการกลายพันธุ์

เราไม่ได้คุยกันที่นี่ว่าแต่ละเมธอดทำอะไร (ทั้งง่ายและสะดวก) แต่คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับ Python listและtuplesได้

ซื้อกลับบ้าน

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

ลิงค์อิน:https://www.linkedin.com/in/mohamed-aziz-belaweid/

GitHub:https://github.com/azayz

อ่านเรื่องราวอื่น ๆ ของฉัน:

REALM : ดึงแบบจำลองภาษาเสริมเตรียม การจดจำอารมณ์บนใบหน้า ลงมือปฏิบัติจริง !

สมัครสมาชิกและรับการแจ้งเตือนทุกครั้งที่ฉันโพสต์บางสิ่ง: