อธิบายอาร์เรย์ใน 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 จะให้โมดูลที่เรียกว่าอาร์เรย์ แก่คุณ ซึ่งช่วยให้คุณทำสิ่งนี้ได้:
ที่นี่คุณสังเกตเห็นว่าเราส่ง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 : ดึงแบบจำลองภาษาเสริมเตรียม การจดจำอารมณ์บนใบหน้า ลงมือปฏิบัติจริง !สมัครสมาชิกและรับการแจ้งเตือนทุกครั้งที่ฉันโพสต์บางสิ่ง:





































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)