set คืออะไร?
set คือ ชุดข้อมูลที่มีการแสดงผลไม่เป็นไปตามลำดับ ทำให้ไม่สามารถเข้าถึงข้อมูลโดยการ index ไม่สามารถมีข้อมูลซ้ำกันได้ และทำงานเร็วกว่า list
ข้อมูลใน set จะถูกคลุมด้วยวงเล็บปีกกา {} เราไม่สามารถเปลี่ยนข้อมูลใน set ได้ แต่จะสามารถเพิ่มและลบข้อมูลได้
การเข้าถึงข้อมูล
เราไม่สามารถเข้าถึงข้อมูลด้วยการ index ได้เหมือน list และ tuple หรือใช้ key ในการเข้าถึงข้อมูลได้แบบ dictionary
การเข้าถึงข้อมูลใน set เราต้องใช้การ loop ข้อมูลใน set โดยใช้ for…loop
ตัวอย่าง
set1 = {'melon', 'mango', 'pomelo'}
for x in set1:
print(x)
output:
pomelo
melon
mango
ความหมายของการแสดงผลอย่างไม่เป็นลำดับ หรือ unordered คือ เมื่อเรากดรันโปรแกรม มันจะไม่ได้แสดงข้อมูลใน set ตามลำดับที่เราลงไว้ เช่น melon, mango, pomelo เวลากดรันโปรแกรมมันอาจจะเอาอะไรขึ้นก่อนก็ได้ นอกจากนั้นหากเรากดรันโปรแกรมอีกครั้งจะเห็นว่ารายการข้อมูลจะเปลี่ยนลำดับไป
การเข้าถึงข้อมูลอีกแบบหนึ่งคือ ใช้ in คีย์เวิร์ดเพื่อดูว่ามีข้อมูลที่ต้องการใน set หรือไม่ จะได้คำตอบเป็น boolean
ตัวอย่าง
set1 = {'melon', 'mango', 'pomelo'}
print('melon' in set1)
output:
True
เพิ่มข้อมูล
หากต้องการเพิ่มข้อมูลเดียว ให้ใช้ method add()
ตัวอย่าง
set1 = {'melon', 'mango', 'pomelo'}
set1.add('apple')
print(set1)
output:
{'pomelo', 'apple', 'mango', 'melon'}
หากต้องการเพิ่มข้อมูลมากกว่า 1 ตัว ใช้ method update()
ตัวอย่าง
set1 = {'melon', 'mango', 'pomelo'}
set1.update(['apple', 'peach', 'tangerine'])
print(set1)
output:
{'apple', 'pomelo', 'peach', 'mango', 'melon', 'tangerine'}
ลบข้อมูลใน set
discard() method
ลบข้อมูลที่ระบุ หากไม่มีข้อมูลนั้นใน set จะไม่แสดง error
ตัวอย่าง
set1 = {'melon', 'mango', 'pomelo'}
set1.discard('apple')
print(set1)
output:
{'melon', 'pomelo', 'mango'}
remove() method
ลบข้อมูลที่ระบุใน set และจะแสดง error หากไม่มีข้อมูลที่ระบุใน set
ตัวอย่าง
set1 = {'melon', 'mango', 'pomelo'}
set1.remove('apple')
print(set1)
output:
KeyError: 'apple'
pop() method
ใช้ลบข้อมูลตัวสุดท้ายใน set ปัญหาคือ เราไม่รู้ว่าแต่ละครั้งที่โปรแกรมรัน ข้อมูลแต่ละตัวจะอยู่ตำแหน่งไหน เพราะฉะนั้นหากเราใช้ method นี้ เราจะไม่มีทางรู้ล่วงหน้าได้เลยว่าข้อมูลตัวไหนจะถูกลบออกจาก set
ตัวอย่าง
set1 = {'melon', 'mango', 'pomelo'}
x = set1.pop()
print(x)
print(set1)
output:
pomelo
{'melon', 'mango'}
รันโปรแกรมครั้งที่สอง โค๊ดเดิม ไม่แก้ไขอะไรเลย แค่รันโปรแกรมอย่างเดียว ได้ผลลัพธ์ตามตัวอย่างข้างล่างนี้
output:
mango
{'pomelo', 'melon'}
จะเห็นว่ารันโปรแกรมครั้งแรก ข้อมูลที่ถูกลบคือ ‘pomelo’ พอรันครั้งที่สอง กลายเป็นว่า ‘mango’ ถูกลบแทนเสียแล้ว
ดังนั้นอย่าใช้ pop() method ลบข้อมูลใน set เว้นเสียแต่ว่าเราไม่สนใจว่าข้อมูลตัวไหนจะถูกลบ แค่ต้องการลบข้อมูลออกตัวหนึ่งเท่านั้น
clear() method
ใช้ลบข้อมูลทั้งหมดออกจาก set
set1 = {'melon', 'mango', 'pomelo'}
set1.clear()
print(set1)
output:
set()
clear() method ไม่ได้ลบ set แต่จะลบแค่ข้อมูลทั้งหมดใน set เท่านั้น จะเห็นได้ว่า output ที่แสดงไม่มีข้อมูลใดๆอยู่เลย แต่ก็ไม่ได้แสดงเป็น set ว่าง {}
del keyword
del จะลบ set ออกไปเลย ไม่ได้ลบแค่ข้อมูลใน set เท่านั้น
set1 = {'melon', 'mango', 'pomelo'}
del set1
print(set1)
output:
NameError: name 'set1' is not defined
จำนวนข้อมูลใน set
ใช้ len() method หาจำนวนข้อมูลใน set
ตัวอย่าง
set1 = {'melon', 'mango', 'pomelo'}
print(len(set1))
output:
3
รวม set เข้าด้วยกัน
union() method
จะได้ set ใหม่ที่เกิดจากการรวมตั้งแต่สอง set ขึ้นไปเข้าด้วยกัน
set1 = {'melon', 'mango'}
set2 = {1, 2, 'pomelo'}
set3 = {'melon', 3.1}
set4 = set1.union(set2, set3)
print(set4)
output:
{'melon', 1, 2, 3.1, 'pomelo', 'mango'}
update() method
เป็นการนำข้อมูลของ set อื่นๆไปใส่ในอีก set หนึ่ง
set1 = {'melon', 'mango'}
set2 = {1, 2, 'pomelo'}
set3 = {'melon', 3.1}
set1.update(set2, set3)
print(set1)
output:
{1, 2, 'melon', 3.1, 'mango', 'pomelo'}
set() constructor
เป็นการสร้าง set โดยใช้ฟังก์ชั่น set()
ตัวอย่าง
set1 = set(('melon', 'mango', 'pomelo'))
print(set1)
output:
{'pomelo', 'mango', 'melon'}
Set Built-in Methods
Method | Description |
---|---|
add() | เพิ่มข้อมูลใน set |
update() | เพิ่มข้อมูลมากกว่าหนึ่งจำนวนใน set และสามารถนำข้อมูลใน set หนึ่งไปใส่ในอีก set หนึ่งได้ |
discard() | ลบข้อมูลที่ต้องการออกจาก set หากไม่มีข้อมูลนั้นอยู่แล้วจะไม่แสดง error |
remove() | ลบข้อมูลที่ต้องการออกจาก set หากไม่มีข้อมูลนั้นจะแสดง error |
pop() | ลบข้อมูลตัวสุดท้ายใน set |
clear() | ลบข้อมูลทั้งหมดออกจาก set |
len() | หาจำนวนของข้อมูลทั้งหมดใน set |
union() | รวม set ตั้งแต่สอง set ขึ้นไปเข้าด้วยกันเป็น set ใหม่ |
copy() | คัดลอก set แบบ deep copy |
difference() | ได้ set ใหม่ที่มีแต่ข้อมูลที่ต่างกับ set อื่นๆเท่านั้น |
difference_update() | ลบข้อมูลใน original set ที่ไปซ้ำกับข้อมูลใน set อื่นๆ |
intersection() | ได้ set ใหม่ที่มีข้อมูลที่เหมือนกับ set อื่นๆเท่านั้น |
intersection_update() | แก้ไขข้อมูลใน original set ให้มีแต่ข้อมูลที่เหมือนกับ set อื่นเท่านั้น |
isdisjoint() | เช็คว่าข้อมูลทุกตัวใน set ที่เราเช็คไม่ซ้ำกับข้อมูลใน set อื่นๆจริงหรือไม่ |
issubset() | เพื่อเช็คว่าข้อมูลทุกตัวใน set หนึ่งปรากฏอยู่ในอีก set หนึ่งจริงหรือไม่ |
issuperset() | เพื่อเช็คว่ามีข้อมูลทุกตัวของ set อื่นปรากฏอยู่ใน set นี้หรือไม่ |
symmetric_difference() | ได้ set ใหม่ที่รวมกันของข้อมูลที่ต่างกันเท่านั้นระหว่างสอง set |
symmetric_difference_update() | เพิ่มข้อมูลที่ไม่มีใน original set เข้าไป และลบข้อมูลที่เหมือนกันกับอีก set หนึ่งออกจาก original set |