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

MethodDescription
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