ค้นหาเว็บไซต์

เรียนรู้โครงสร้างข้อมูลรายการ Python - ตอนที่ 1


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

อะไรคือความแตกต่างระหว่างวัตถุที่เปลี่ยนแปลงได้/ไม่เปลี่ยนรูป?
วัตถุที่ไม่แน่นอน
  1. ออบเจ็กต์ที่สามารถเปลี่ยนแปลงสถานะได้เมื่อถูกสร้างขึ้น เช่น การเพิ่ม การอัปเดต หรือการลบองค์ประกอบ
  2. Lists, Dictionary, Set, bytearray เป็นประเภทอ็อบเจ็กต์ที่ไม่แน่นอนใน Python
วัตถุที่ไม่เปลี่ยนรูป
  1. สถานะของวัตถุไม่สามารถแก้ไขได้ เมื่อสร้างออบเจ็กต์แล้ว เราไม่สามารถเพิ่ม ลบ หรืออัปเดตองค์ประกอบได้
  2. String, Integer, Tuples, Frozenset คือออบเจ็กต์บางประเภทที่ไม่เปลี่ยนรูปใน python
อะไรคือความแตกต่างระหว่างโครงสร้างข้อมูลที่เป็นเนื้อเดียวกัน/ต่างกัน?
  1. โครงสร้างข้อมูลที่เป็นเนื้อเดียวกัน – องค์ประกอบข้อมูลจะเป็นประเภทข้อมูลเดียวกัน (เช่น อาร์เรย์)
  2. โครงสร้างข้อมูลที่แตกต่างกัน – องค์ประกอบข้อมูลต้องไม่ใช่ประเภทข้อมูลเดียวกัน (เช่น รายการ สิ่งอันดับ เซต ฯลฯ...)
ประเภทข้อมูลดั้งเดิมและไม่ใช่ดั้งเดิมคืออะไร

ก่อนที่จะทำความเข้าใจฟังก์ชันการทำงานของโครงสร้างข้อมูลในตัวให้เราดูฟังก์ชันในตัวบางส่วนที่จะใช้กับออบเจ็กต์โครงสร้างข้อมูล

  • dir(obj) – ฟังก์ชันในตัวที่จะส่งคืนแอตทริบิวต์และวิธีการ
  • len(obj) – ส่งกลับความยาว (จำนวนรายการ) ของวัตถุ อาร์กิวเมนต์อาจเป็นลำดับ (เช่น สตริง ไบต์ ทูเพิล รายการ หรือช่วง) หรือคอลเลกชัน (เช่น พจนานุกรม เซ็ต หรือเซ็ตที่ตรึง)
  • del – คีย์เวิร์ดในตัวนี้ใช้เพื่อลบวัตถุออกจากเนมสเปซหรือลบรายการออกจากวัตถุเช่นรายการ พจนานุกรม ฯลฯ
  • type(obj) – ฟังก์ชัน type() จะส่งคืนประเภทของออบเจ็กต์หรือส่งคืนออบเจ็กต์ประเภทใหม่ตามอาร์กิวเมนต์ที่ส่งผ่าน
  • id() – ฟังก์ชันนี้ส่งคืน “ตัวตน” ของวัตถุ นี่คือจำนวนเต็มที่รับประกันว่าจะไม่ซ้ำกันและคงที่สำหรับวัตถุนี้ตลอดอายุการใช้งาน

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

Python มาพร้อมกับโครงสร้างข้อมูลในตัว และผู้ใช้สามารถกำหนดโครงสร้างข้อมูลของตนเองได้ โครงสร้างข้อมูลในตัวประกอบด้วย LIST, DICTIONARY, TUPLE และ SET ตัวอย่างบางส่วนสำหรับโครงสร้างข้อมูลที่ผู้ใช้กำหนด ได้แก่ STACK, QUEUES, TREE, HASHMAP ฯลฯ...

คนที่มาจากภาษาโปรแกรมอื่นจะคุ้นเคยกับประเภทอาเรย์เป็นอย่างดี แต่ใน python มันไม่ธรรมดาเลย

ที่นี่รายการจะคล้ายกับอาร์เรย์ แต่รายการช่วยให้เราสามารถเก็บค่าของประเภทข้อมูลใด ๆ (ต่างกัน) ในขณะที่อาร์เรย์จะเก็บข้อมูลประเภทใดประเภทหนึ่งเท่านั้น (int, float ฯลฯ ... ) หากต้องการใช้อาร์เรย์ คุณต้องนำเข้าอาร์เรย์จากโมดูล "อาร์เรย์" อย่างชัดเจน

ในบทความชุด Python นี้ เราจะดูว่า โครงสร้างข้อมูล และ โครงสร้างข้อมูลในตัวของ Python คืออะไร

รายการ

รายการ คือโครงสร้างข้อมูลที่รวบรวมประเภทข้อมูลต่างๆ “การรวบรวมข้อมูลประเภทต่างๆ ” หมายความว่าอย่างไร รายการ สามารถจัดเก็บสตริง จำนวนเต็ม ค่าจุดทศนิยม รายการที่ซ้อนกัน และอื่นๆ

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

  • สร้างรายการ
  • แทรก/เข้าถึง/แก้ไขรายการ
  • ลบรายการ

สร้างรายการ

สามารถสร้างรายการได้โดยใช้วงเล็บเหลี่ยม

>>> name_empty = []			# Empty list
>>> name = ['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']	# list with string data type
>>> name_int = [1,2,3]			# list with Integer data type
>>> name_mixed = [name_int,name,1,2,3.14]	# list with nested list items.
>>> name_mixed
[[1, 2, 3], ['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will'], 1, 2, 3.14]
>>> name_int
[1, 2, 3]

เราสามารถใช้ฟังก์ชัน inbuilt type() เพื่อตรวจสอบประเภทวัตถุ

>>> type(name)

เราสามารถเข้าถึง วิธีการ และ คุณลักษณะ ของอินสแตนซ์ รายการ โดยใช้ฟังก์ชัน dir()

>>> dir(name)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

เราสามารถหาจำนวนรายการทั้งหมดในรายการได้โดยใช้วิธี len()

>>> len(name)

เราสามารถสร้างรายการใหม่จากรายการที่มีอยู่โดยใช้วิธี list.copy()

>>> name_new = name.copy()
>>> name_new
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']

การแทรก/การเข้าถึง/การแก้ไขรายการ

เราสามารถแทรกรายการลงในรายการในตำแหน่งใดก็ได้โดยใช้วิธี list.insert(i, x)

>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> name
['Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.insert(0,'Tom')	# Insert method takes 2 arguments (Index position, Item)
>>> name
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']	# Tom is inserted at the 0th position.

เราสามารถใช้วิธี list.append(x) เพื่อผนวกรายการเดียวในรายการได้ ซึ่งจะแทรกรายการไปที่ท้ายรายการ

>>> name = []
>>> len(name)
0
>>> name.append('Leo')
>>> name.append('Matt')
>>> name.append('Kane')
>>> print(name)
['Leo', 'Matt', 'Kane']

เราสามารถใช้วิธี list.extend() เพื่อเพิ่มหลายรายการลงในรายการได้

>>> new_name = ['Gowtham','Martin','Luis']
>>> name.extend(new_name)
>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']

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

>>> a = [1,2,3]
>>> b = [2,3,3]
>>> c = a + b
>>> c
[1, 2, 3, 2, 3, 3]
>>> d = ['karthi','kenny']
>>> e = a + d
>>> e
[1, 2, 3, 'karthi', 'kenny']

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

>>> name									# Before modified
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name[0] = 'Karthi'
>>> name									# After Modified
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']

รายการ รองรับการจัดทำดัชนีทั้งเชิงบวกและเชิงลบ

การจัดทำดัชนีเริ่มต้นจาก 0 และการจัดทำดัชนีเชิงลบเริ่มต้นจาก -1

เราสามารถเข้าถึงรายการโดยใช้ตำแหน่งดัชนี

>>> name[0]			# Accessing the List item at index 0
'Leo'
>>> name[1]
'Matt'
>>> name[4]
'Petter'
>>> name[5]
'Will'
>>> name[-1]			# Accessing the list item with negative indexing
'Will'
>>> name[-6]
'Leo'

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

SYNTAX: list[starting position, ending position, Step]

>>> name[0:3]
['Tom', 'Leo', 'Matt']
>>> name[:]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name[:4]
['Tom', 'Leo', 'Matt', 'Kane']
>>> name[:-2]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott']
>>> name[:-1]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter']
>>> name[:-1:2]
['Tom', 'Matt', 'Scott']

เราสามารถหาจำนวนครั้งที่เกิดขึ้นสำหรับค่าที่กำหนดได้โดยใช้วิธี list.count(x)

>>> name_int = [1,1,2,3,1]
>>> name_int.count(1)
3

เราสามารถค้นหาตำแหน่งดัชนีของรายการที่กำหนดโดยใช้วิธี list.index(x[, start[, end]])

>>> name			# Inserted ‘Will’ at the end of the list. Now we have 2 name ‘Will’.
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will']
>>> name.index('Will)	# Returns the index position of first occurence of x.
0
>>> name.index('Will',2)	# Starting index positon’2’ is given.
7
>>> name.index('Will',2,4)	# Starting and Ending Index position is given. Since there is no 					occurence of ‘Will’ within the given search position it will throw 					Value Error.
Traceback (most recent call last):
File "<stdin>", line 1, in 
ValueError: 'Will' is not in list

เราสามารถใช้วิธี list.reverse() เพื่อย้อนกลับรายการในรายการ

>>> name
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.reverse()
>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi']

ลบรายการ

เราสามารถใช้วิธี list.pop(x) เพื่อลบรายการออกจากรายการที่ตำแหน่ง x ฟังก์ชั่นนี้จะลบรายการออกจากรายการและแสดงรายการที่ถูกลบ หากไม่ได้ระบุ x วิธีการ pop() จะส่งคืนรายการสุดท้ายจากรายการ

>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']
>>> name.pop(0)
'Will'
>>> name
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']
>>> name.pop()
'Luis'

นอกจากนี้เรายังสามารถใช้วิธี list.remove (x) เพื่อลบรายการออกจากรายการ ที่นี่ x รับค่าของรายการและส่ง ValueError หาก x ไม่อยู่ในรายการ

>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> name.remove('Leo')
>>> name
['Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.remove('Leo')
Traceback (most recent call last):
  File "", line 1, in 
ValueError: list.remove(x): x not in list

เราสามารถสร้างรายการว่างได้โดยการกำหนดชื่อรายการให้กับวงเล็บเหลี่ยมหรือใช้วิธี list.clear()

>>> name1 = name.copy()
>>> name1
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin']
>>> name
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin']
>>> name = []			
>>> name
[]
>>> name1.clear()		
>>> name1
[]

แทนที่จะใช้วิธีการรายการเพื่อทำให้รายการว่างเปล่าหรือลบรายการออกจากรายการ เราสามารถใช้คำหลัก del ในตัวเพื่อดำเนินการนี้ได้ คีย์เวิร์ด “del” สามารถลบวัตถุรายการออกจากหน่วยความจำหรือลบรายการออกจากรายการหรือลบรายการออกจากชิ้น

>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> del name[0]
>>> name
['Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> del name[-3:]
>>> name
['Matt', 'Kane']
>>> del name[:]
>>> name
[]

ฟังก์ชัน id() ในตัวจะส่งคืน “ตัวตน ” ของออบเจ็กต์ นี่คือจำนวนเต็มซึ่งรับประกันว่าจะไม่ซ้ำกันและคงที่สำหรับวัตถุนี้ตลอดอายุการใช้งาน

>>> id(name)
139979929658824
>>> del name
>>> id(name)
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'name' is not defined

หมายเหตุ: เราได้ลบตัวแปรรายการออกจากหน่วยความจำโดยใช้ del() ดังนั้นจึงทำให้เกิดข้อผิดพลาดเกี่ยวกับชื่อ

help() funtion:

ความช่วยเหลือในตัว function() มีประโยชน์มากในการดูรายละเอียดเกี่ยวกับวัตถุเฉพาะหรือวิธีการของวัตถุนั้น

help(object)
help(object.method)
สรุป

จนถึงตอนนี้ในบทความนี้ เราได้เห็นวิธีที่เราสามารถใช้ โครงสร้างข้อมูลรายการ เพื่อจัดเก็บ เข้าถึง แก้ไข ลบวัตถุรายการโดยใช้วิธีการรายการ นอกจากนี้เรายังได้เห็นฟังก์ชันในตัวเช่น id(), dir(), type(), help()< ซึ่งเป็นฟังก์ชันที่มีประสิทธิภาพมาก นอกจากนี้เรายังมีความเข้าใจรายการใน python ซึ่งช่วยให้สร้างรายการได้กระชับและอ่านง่ายยิ่งขึ้น