Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Array — อาร์เรย์ที่มีประสิทธิภาพของค่าตัวเลขใน Python


Array เป็นโครงสร้างข้อมูลที่ได้รับความนิยมอย่างมากในภาษา C/C++, Java และอื่นๆ ในอาร์เรย์ภาษาเหล่านี้ถูกกำหนดให้เป็นคอลเล็กชันขององค์ประกอบมากกว่าหนึ่งประเภทข้อมูลที่คล้ายคลึงกัน Python ไม่มีอาร์เรย์เทียบเท่าในตัว It's List และ Tuple คือชุดขององค์ประกอบต่างๆ แต่อาจมีหลายประเภท

โมดูลอาร์เรย์ของ Python จำลองอาร์เรย์ประเภท C โมดูลกำหนดคลาส 'อาร์เรย์' ตัวสร้างต่อไปนี้สร้างวัตถุอาร์เรย์:

array(typecode, initializer)

อาร์กิวเมนต์ typecode กำหนดประเภทของอาร์เรย์ Initializer ควรเป็นลำดับที่มีองค์ประกอบทั้งหมดของประเภทที่ตรงกัน

คำสั่งต่อไปนี้จะสร้างวัตถุอาร์เรย์จำนวนเต็ม:

>>> import array
>>> arr = array.array('i', range(5))
>>> arr
array('i', [0, 1, 2, 3, 4])
>>> type(arr)
<class 'array.array'>
>>> array.typecodes
'bBuhHiIlLqQfd'

โมดูลอาร์เรย์กำหนดแอตทริบิวต์ typecodes ซึ่งส่งคืนสตริง อักขระแต่ละตัวในสตริงแสดงถึงรหัสประเภทที่ระบุประเภท C และประเภท Python ที่เทียบเท่า:

พิมพ์โค้ด ประเภท C ประเภท Python
'b' สัญลักษณ์ที่ลงนามแล้ว int
'B' ถ่านที่ไม่ได้ลงชื่อ int
'u' Py_UNICODE อักขระ Unicode
'h' ลงนามแบบย่อ int
'H' แบบสั้นที่ไม่ได้ลงนาม int
'i' ลงชื่อเข้าใช้ int
'ฉัน' ไม่ได้ลงนาม int
'l' ลงนามแบบยาว int
'L' ไม่มีเครื่องหมายยาว int
'q' เซ็นชื่อแบบยาว int
'Q' unsigned long long int
'f' ลอย ลอย
'd' คู่ ลอย

อาร์กิวเมนต์ initializer สามารถเป็นไบต์เช่นวัตถุ ตัวอย่างต่อไปนี้สร้างอาร์เรย์จากการแทนค่าไบต์ของสตริง

>>> arr1 = array.array('b', b'Hello')
>>> arr1
array('b', [72, 101, 108, 108, 111])

คลาสอาร์เรย์กำหนดวิธีการดังต่อไปนี้:

array.buffer_info()

เมธอดนี้ส่งคืนทูเพิล (ที่อยู่, ความยาว) ซึ่งระบุที่อยู่หน่วยความจำปัจจุบันและความยาวในองค์ประกอบของบัฟเฟอร์ที่ใช้เก็บเนื้อหาของอาร์เรย์

>>> arr = array.array('i', [0, 1, 2, 3, 4])
>>> arr.buffer_info()
(2201141755144, 5)

นับ()

เมธอดนี้จะคืนค่าจำนวนครั้งขององค์ประกอบบางอย่างในอาร์เรย์

>>> arr = array.array('i', [0, 1, 2, 3, 4])
>>> arr.count(2)
1

ขยาย()

วิธีนี้จะผนวกรายการจาก iterable ต่อท้ายอาร์เรย์หรือ iterable ซึ่งต้องมีรหัสประเภทเดียวกันทุกประการ ถ้าไม่เช่นนั้น TypeError จะถูกยกขึ้น

>>> arr = array.array('i', [0, 1, 2, 3, 4])
>>> arr1 = array.array('i',[10,20,30])
>>> arr.extend(arr1)
>>> arr
array('i', [0, 1, 2, 3, 4, 10, 20, 30])

fromfile()

เมธอดนี้อ่าน n รายการ (เป็นค่าเครื่อง) จากอ็อบเจ็กต์ไฟล์และต่อท้ายอาร์เรย์

ในตัวอย่างต่อไปนี้ ก่อนอื่นเราเปิดไฟล์ในโหมดเขียนไบนารี

>>> file = open('test.txt','wb')
>>> file.write(b'Hello Python')
12
>>> file.close()

ตอนนี้เราใช้ไฟล์นี้เพื่อผนวกข้อมูลเข้ากับวัตถุอาร์เรย์

>>> a = array.array('i')
>>> file = open('test.txt','rb')
>>> a.fromfile(file,file.tell())
>>> a
array('i', [1819043144, 2035294319, 1852794996])

ต่อท้าย()

วิธีนี้จะต่อท้ายรายการใหม่ต่อท้ายอาร์เรย์

fromlist()

วิธีนี้จะผนวกรายการจากรายการไปยังอาร์เรย์ ซึ่งเทียบเท่ากับ x ในรายการ:a.append(x)

>>> a = array.array('i')
>>> a.append(10)
>>> a
array('i', [10])
>>> num = [20,30,40,50]
>>> a.fromlist(num)
>>> a
array('i', [10, 20, 30, 40, 50])

insert()

แทรกรายการใหม่ในอาร์เรย์ก่อนตำแหน่งที่ระบุ

>>> a = array.array('i', [10, 20, 30, 40, 50])
>>> a.insert(2,25)
>>> a
array('i', [10, 20, 25, 30, 40, 50])

ป๊อป()

เมธอดนี้ส่งคืนไอเท็มที่ดัชนีที่กำหนดหลังจากลบออกจากอาร์เรย์

>>> a = array.array('i', [10, 20, 30, 40, 50])
>>> x = a.pop(2)
>>> x
30
>>> a
array('i', [10, 20, 40, 50])

ลบ()

เมธอดนี้จะลบรายการที่ระบุครั้งแรกออกจากอาร์เรย์

>>> a = array.array('i', [10, 20, 30, 40, 50])
>>> a.remove(30)
>>> a
array('i', [10, 20, 40, 50])

tofile()

เมธอดนี้เขียนรายการทั้งหมดไปยังอ็อบเจ็กต์ไฟล์โดยเปิดใช้สิทธิ์การเขียน

>>> a = array.array('i', [10, 20, 30, 40, 50])
>>> file = open("test.txt","wb")
>>> a.tofile(file)
>>> file.close()
>>> file = open("test.txt","rb")
>>> file.read()
b'\n\x00\x00\x00\x14\x00\x00\x00\x1e\x00\x00\x00(\x00\x00\x002\x00\x00\x00'