Sets (เซ็ท)#

Set (เซ็ต) เป็นอออบเจกต์ที่ใช้เก็บข้อมูลที่ไม่ซ้ำกันรวมเป็นชุดข้อมูลชุดเดียวกัน เราสามารถใช้ Set หาค่าที่ไม่ซ้ำกันภายในลิสต์ ใช้ตรวจสอบข้อมูลที่มีอยู่แล้ว หรือดำเนินการทางคณิตศาสตร์ที่เกี่ยวกับเซ็ท เช่น Intersection, Union, Difference และ Symmetric difference ได้

คุณอาจจะเคยเรียนเรื่องเซ็ท (Set) และทฤษฎีเซตในวิชาคณิตศาสต์กันมา และน่าจะคุนเคยกับแผนภาพของเวน (Venn Diagram) ประมาณนี้…

(src: https://texample.net//tikz/examples/set-operations-illustrated-with-venn-diagrams/)

แต่ถ้าจำไม่ได้หรือไม่คุ้นเลย ก็ไม่ต้องตกใจ ในบทนี้จะเรียนรู้ข้อมูลชนิด Sets (เซ็ท) ในภาษาไพธอนแบบเข้าใจง่ายๆ กัน

เราจะทำความรู้จักกับ Sets ว่าคืออะไร เรียนรู้วิธีการประกาศและการใช้งาน Sets เรียนรู้เมธอดที่ใช้ในการเพิ่มและลบข้อมูลของ Set รวมถึงวิธีดำเนินการทางคณิตศาสตร์ที่เกี่ยวข้องกับเซ็ตเบื้องต้น (Union, Intersection, Difference และ Symmetric difference)

Ref:

Set (เซ็ต) คือ?#

Set (เซ็ต) เป็นออบเจ็คที่สร้างขึ้นจากคลาส set ใช้สำหรับเก็บข้อมูลที่ไม่ซ้ำกันรวมเป็นชุดข้อมูลชุดเดียวกัน ซึ่งข้อมูลภายเซ็ตจะไม่มีลำดับของข้อมูล

คุณสมบัติของ Set

  • องค์ประกอบหรือสมาชิกภายในเซ็ทจะไม่ซ้ำกัน (ซ้ำกันไม่ได้ ไม่อนุญาต)

  • ข้อมูลภายในเซ็ทจะไม่เรียงลำดับ (ทำให้การประมวลผลทำได้อย่างรวดเร็ว)

  • เป็นชนิดข้อมูลแบบเปลี่ยนแปลงได้ (Mutable Types) แต่สมาชิกที่อยู่ภายใน Set ต้องเป็นประเภทที่เปลี่ยนแปลงไม่ได้ (Immutable Types)

เราจะมาดูกันว่าคุณสมบัติข้างต้นนั้นหมายความว่าอย่างไร และเราจะใช้งาน Set ใน Python ได้อย่างไร

การประกาศและใช้งาน Set#

การสร้างเซ็ตของข้อมูล เราสามารถสร้าง Sets ได้ 2 วิธี คือ

  • การสร้างโดยใช้วงเล็บปีกกา (curly braces) {...} และ

  • การสร้างโดยใช้ฟังก์ชัน set( )

1) การสร้างโดยใช้เครื่องหมาย {...}

โดยนำข้อมูลทั้งหมดใส่ภายในเครื่องหมายวงเล็บปีกกา {…} แล้วทำการคั่นแต่ละสมาชิกด้วยเครื่องหมายคอมมา (,) ซึ่งวิธีนี้เป็นวิธีที่ง่ายและใช้บ่อยที่สุด

# สร้าง list ด้วยวงเล็บสี่เหลียม []
[1,1,1,1,2,3,4,5,'rock', 'rock', 'pop']
[1, 1, 1, 1, 2, 3, 4, 5, 'rock', 'rock', 'pop']
# สร้าง set ด้วยวงเล็บปีกกา {}
{1,1,1,1,2,3,4,5,'rock', 'rock', 'pop'}
{1, 2, 3, 4, 5, 'pop', 'rock'}
# สร้างตัวแปรเก็บข้อมูล set

set1 = {"pop", "rock", "soul", "hard rock", "rock", "R&B", "rock", "disco"}
set1
{'R&B', 'disco', 'hard rock', 'pop', 'rock', 'soul'}

จากตัวอย่างข้างต้นเป็นการยืนยันว่า Set จะประกอบด้วยสมาชิกที่มีค่าไม่ซ้ำค่ากัน! ถ้าหากว่าข้อมูลที่ประกาศซ้ำกัน Python จะลบรายการที่ซ้ำกัน (ให้เหลือเพียงรายการเดียว) โดยอัตโนมัติ

องค์ประกอบหรือสมาชิกที่บรรจุอยู่ภายใน Set จะไม่จำกัดจำนวนและเก็บข้อมูลได้หลายชนิดภายในเซ็ตเดียวกันได้ ไม่ว่าจะเป็น เลขจำนวนเต็ม(integer), เลขทศนิยม(float), tuple, ข้อความ(string) ก็ตาม แต่…ไม่สามารถเก็บข้อมูลที่แก้ไขข้อมูล(mutable) เช่น ลิสต์ (list), เซ็ต(set) หรือ ดิกชันนารี(dictionary) ได้

ยกตัวอย่างเช่น เราสามารถสร้างตัวแปรที่ภายในเป็น tuple ซึ่งเป็นข้อมูลแบบ immutable ได้

set2 = {("pop", "pop rock", "teen pop"), ("rock", "hard rock", "electronic rock")} # ภายในเป็น immutable
set2
{('pop', 'pop rock', 'teen pop'), ('rock', 'hard rock', 'electronic rock')}

แต่ถ้าภายในเป็น list หรือ set ซึ่งเป็นข้อมูลแบบ mutable จะเกิดข้อผิดพลาด (TypeError: unhashable type: ‘list’ (‘set’)) เนื่องจาก สมาชิกที่อยู่ภายในเซ็ตต้องเป็น Hashtable object (ออบเจ็กต์ที่มีค่าแฮช (hash; ตรวจสอบโดยใช้ฟังก์ชัน hash()) และมีค่าเดิมไม่เปลี่ยนแปลงตลอดช่วงอายุของมัน (ค่า id ของออบเจ็กต์เป็นค่าเดิมเสมอ))

set3 = {["pop", "pop rock", "teen pop"], ["rock", "hard rock", "electronic rock"]} # ภายในเป็น mutable
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In [5], line 1
----> 1 set3 = {["pop", "pop rock", "teen pop"], ["rock", "hard rock", "electronic rock"]}

TypeError: unhashable type: 'list'
set4 = {{"pop", "pop rock", "teen pop"}, {"rock", "hard rock", "electronic rock"}} # ภายในเป็น mutable

กล่าวคือ สมาชิกที่อยู่ภายใน Set ต้องเป็นประเภทที่เปลี่ยนแปลงไม่ได้ (Immutable Types) เท่านั้น

2) การสร้างโดยใช้ฟังก์ชัน set( )

เราสามารถสร้างเซ็ตของข้อมูลโดยใช้ฟังก์ชัน set( )

x = set(<iterable>)

ณ ที่นี้ <iterable> คือ ออบเจ็กต์ใดๆ ที่เราสามารถทำการวนซ้ำกับมันได้ ซึ่งรวมไปถึง lists, tuples, dictionaries, sets หรือแม้แต่ strings ก็ถือเป็น Iterable เช่นกัน

ตัวอย่างต่อไปนี้เป็นการสร้างเซ็ทจากลิสต์ที่มีข้อมูลหลายชนิดภายในลิสต์เดียวกัน

# เปลี่ยนข้อมูล List ให้เป็น Set

album_list = ["Michael Jackson", "Thriller", 1982, "00:42:19", \
              "Pop, Rock, R&B", 46.0, 65, "30-Nov-82", None, 10.0]
album_set = set(album_list)             
print(album_set)
{65, '00:42:19', None, 10.0, 46.0, 'Thriller', 'Pop, Rock, R&B', '30-Nov-82', 'Michael Jackson', 1982}

ลองสร้างชุดข้อมูล Set ของรูปแบบเพลงตามจังหวะ (genres) กัน

# เปลี่ยนข้อมูล List ให้เป็น Set

music_genres = set(["pop", "pop", "rock", "folk rock", "hard rock", "soul", \
                    "progressive rock", "soft rock", "R&B", "disco", "disco"])
print(music_genres)

# เปลี่ยนข้อมูล Set ให้เป็น Set
print(set(music_genres))
{'soul', 'soft rock', 'rock', 'folk rock', 'disco', 'pop', 'hard rock', 'R&B', 'progressive rock'}
{'soul', 'soft rock', 'rock', 'folk rock', 'disco', 'pop', 'hard rock', 'R&B', 'progressive rock'}

Note

ตัวอย่างข้างต้นแสดงให้เห็นว่า เราสามารถใช้ฟังก์ชัน set( ) หาค่าที่ไม่ซ้ำกันภายในลิสต์ได้ ! และข้อมูลภายในเซ็ตจะไม่มีลำดับของข้อมูล!

สตริงเป็นข้อมูล iterable สามารถวนซ้ำได้ ดังนั้นจึงสามารถส่งผ่านสตริงไปยังฟังก์ชัน set() ได้เช่นกัน

ตัวอย่างต่อไปนี้แสดงให้เห็นว่า ฟังก์ชัน list() สร้างลิสต์ของอักขระทุกตัวที่อยู่ในสตริง (มีลำดับ) และในทำนองเดียวกัน ฟังก์ชัน set(s) สร้างเซ็ทของอักขระที่อยู่ในสตริง (ไม่มีลำดับ)

str_list = list("Practice makes perfect")
print(f"Size of {str_list}: {len(str_list)}")
Size of ['P', 'r', 'a', 'c', 't', 'i', 'c', 'e', ' ', 'm', 'a', 'k', 'e', 's', ' ', 'p', 'e', 'r', 'f', 'e', 'c', 't']: 22
str_set = set("Practice makes perfect")
print(f"Size of {str_set}: {len(str_set)}")
Size of {'p', 't', 'P', 'r', 'i', 's', 'k', 'f', 'e', 'c', ' ', 'm', 'a'}: 13

Note

เมื่อฟังก์ชัน set() รับอาร์กิวเมนต์ที่เป็น iterable ฟังก์ชัน set() จะสร้างเซ็ทขององค์ประกอบที่ประกอบเป็น iterable นั้นๆ ในขณะที่การวางออบเจ็กต์ในวงเล็บปีกการ {...} จะสร้างเซ็ทของออบเจ็กต์ตัวเดิมนั้นๆ แม้ว่าออบเจ็กต์ตัวเดิมนั้นจะเป็น iterable ก็ตาม

>>> set(“Engineering”) # สร้างเซ็ทขององค์ประกอบที่ประกอบเป็น iterable (str)

{‘E’, ‘r’, ‘i’, ‘g’, ‘n’, ‘e’}

>>> {“Engineering”} # สร้างเซ็ทของออบเจ็กต์ตัวเดิมนั้นๆ (str)

{‘Engineering’}

>>> set([“Engineering”]) # สร้างเซ็ทขององค์ประกอบที่ประกอบเป็น iterable (list)

{‘Engineering’}


การดำเนินการพื้นฐานกับ Sets#

เนื่องจาก Sets เป็นข้อมูลแบบ Immutable เราสามารถเปลี่ยนแปลง/แก้ไข เช่น การเพิ่มหรือลบข้อมูล ภายใน Sets ได้

เราจะลองเขียนโค้ดเปลี่ยนขอมูลภายใน Set A กัน

# ประกาศตัวแปร A

A = set(["Thriller", "Back in Black", "AC/DC"])
A
{'AC/DC', 'Back in Black', 'Thriller'}

เพิ่มข้อมูลเข้าไปในเซ็ตโดยใชัเมธอด add( )

# เพิ่มสมาชิกใหม่เข้าไปในเซ็ต

A.add("NSYNC")
A
{'AC/DC', 'Back in Black', 'NSYNC', 'Thriller'}

ถ้าเราเพิ่มข้อมูลที่มีอยู่แล้วในเซ็ต A เช่น เพิ่ม “NSYNC” เข้าไปอีกครั้ง ก็ไม่เกิดการเปลี่ยนแปลง เพราะข้อมูลในเซ็ตจะต้องไม่ซ้ำกัน!

# ลองเพิ่มสมาชิกใหม่ที่ซ้ำกับข้อมูลเดิมที่มีอยู่แล้ว

A.add("NSYNC")
A
{'AC/DC', 'Back in Black', 'NSYNC', 'Thriller'}

เพิ่มข้อมูลครั้งละหลายตัวเข้าไปในเซ็ตโดยใชัเมธอด update( )

ในการเพิ่มข้อมูลเข้าไปในเซ็ตนั้น นอกจากการเพิ่มข้อมูลเข้าไปทีละตัวด้วยเมธอด add( ) แล้ว เรายังสามารถเพิ่มข้อมูลครั้งละหลายตัวได้โดยใช้เมธอด update( )

โดยอาร์กิวเมนต์ที่ส่งให้กับเมธอดนี้ต้องเป็นออบเจกต์ iterable เช่น tuples, ลิสต์ (lists), ข้อความ (string) หรือ เซ็ต(set)

A.update({"NSYNC", "Bye Bye Bye"})
A
{'AC/DC', 'Back in Black', 'Bye Bye Bye', 'NSYNC', 'Thriller'}

และแน่นอน ข้อมูลใหม่จะไม่ซ้ำกับข้อมูลที่มีอยู่เดิม

x = {"apple", "banana", "cherry"}
y = {"google", "microsoft", "apple"}

x.update(y)

print(x)
{'banana', 'microsoft', 'apple', 'google', 'cherry'}

การลบข้อมูลออกจากเซ็ตโดยใช้เมธอด remove( )

# ลบข้อมูลออกจากเซ็ต

A.remove("NSYNC")
A
{'AC/DC', 'Back in Black', 'Bye Bye Bye', 'Thriller'}

ลองรั้นโค้ดข้างต้นอีกที แล้วดูว่าจะเกิดอะไรขึ้น??

Error

  • หากข้อมูลที่จะลบไม่มีอยู่ในเซ็ต จะเกิดข้อผิดพลาดขึ้น เราจึงควรจะทราบข้อมูลที่ต้องการจะลบก่อนเรียกใช้เมธอด remove( )

  • การลบข้อมูลออกจากเซ็ตมีอีกวิธี คือ การใช้เมธอด discard( ) โดยเมธอดนี้จะไม่เกิดการเปลี่ยนแปลงใดๆ (ไม่เกิดข้อผิดพลาดขึ้น) หากข้อมูลที่ต้องการจะลบไม่มีอยู่ในเซ็ต

*เมธอด clear( ) ใช้ลบข้อมูลทั้งหมดออกจากเซ็ต

การตรวจสอบค่าใน Set ด้วยตัวดำเนินการ in

เราสามารถใช้ตัวดำเนินการ in ตรวจสอบว่ามีค่าที่เราต้องการอยู่ในเซ็ตหรือไม่ โดยตัวดำเนินการ in ส่งค่ากลับเป็น True ถ้าหากค่าดังกล่าวมีอยู่ภายใน Set ไม่เช่นนั้นมันส่งค่ากลับเป็น False

# ตรวจสอบว่าอยู่ใน Set หรือไม่

"AC/DC" in A
True

ตัวดำเนินการ not in จะตรงกันข้ามกับตัวดำเนินการ in

# ตรวจสอบว่าอยู่ใน Set หรือไม่

"AC/DC" not in A
False

ลบข้อมูลทั้งหมดออกจากเซ็ตโดยใช้เมธอด clear() กลายเป็นเซ็ตว่าง (null Set / empty set) เมื่อเช็คจำนวนสมาชิก จะส่งค่ากลับเป็นศูนย์

# ลบข้อมูลทั้งหมดออกจากเซ็ต
A.clear()
print(A) 
print(len(A))
set()
0

การดำเนินการทางคณิตศาสตร์ที่เกี่ยวกับ Sets#

เราสามารถดำเนินการทางคณิตศาสตร์กับข้อมูลแบบเซ็ตได้ เช่น การรวมข้อมูลกัน (Union (ยูเนียน)), การเลือกข้อมูลเฉพาะที่ซ้ำซ้อนกัน (Intersection (อินเตอร์เซคชัน)) และ การเลือกข้อมูลเฉพาะข้อมูลที่แตกต่างจากอีกเซ็ตข้อมูล (Difference)

เราจะพิจารณาเซ็ตสองชุดต่อไปนี้

# ตัวอย่างของ Sets

album_set1 = set(["Thriller", 'AC/DC', 'Back in Black'])
album_set2 = set([ "AC/DC", "Back in Black", "The Dark Side of the Moon"])

# แสดงข้อมูลทั้งสอง Set

album_set1, album_set2
({'AC/DC', 'Back in Black', 'Thriller'},
 {'AC/DC', 'Back in Black', 'The Dark Side of the Moon'})

การเลือกข้อมูลเฉพาะที่ซ้ำซ้อนกัน (Intersection)

การเลือกข้อมูลเฉพาะที่ซ้ำซ้อนกัน (Intersection) เป็นการค้นหาข้อมูลเฉพาะข้อมูลที่มีร่วมกันหรือมีเหมือนกันระหว่างข้อมูลในแต่ละเซ็ต โดยอาจจะใช้เครื่องหมายดำเนินการ & หรือจะใช้เมธอด intersection( ) ในการดึงข้อมูลที่มีร่วมกันก็ได้

เนื่องจากข้อมูลทั้งสองชุดมี AC/DC และ Back in Black ร่วมกัน เราจึงสามารถแสดงข้อมูลที่มีร่วมกันด้วยจุดตัดของวงกลมสองวงได้ ดังรูป

ใช้เครื่องหมายดำเนินการ “&” ในการดึงข้อมูลที่มีร่วมกัน

# เลือกเฉพาะข้อมูลที่ซ้ำซ้อนกัน (Intersection)

intersection = album_set1 & album_set2
intersection
{'AC/DC', 'Back in Black'}

หรือจะใช้เมธอด intersection( ) ในการดึงข้อมูลที่มีร่วมกันระหว่าง album_list1 กับ album_list2 ก็ได้

album_set1.intersection(album_set2)   
{'AC/DC', 'Back in Black'}

เราสามารถแสดงข้อมูลที่มีร่วมกันด้วยจุดตัดของวงกลมสองวงได้ ดังรูป

การเลือกข้อมูลเฉพาะข้อมูลที่ต่างจากอีกเซ็ตข้อมูล (Difference)

การเลือกข้อมูลเฉพาะข้อมูลที่ต่างจากอีกเซ็ตข้อมูล (Difference) คือ การหาเฉพาะข้อมูลที่มีอยู่ในเซ็ตหนึ่ง แต่ข้อมูลดังกล่าวไม่มีอยู่ในอีกเซ็ตหนึ่งที่นำมาเปรียบเทียบ โดยอาจจะใช้เครื่องหมายลบ - หรือจะใช้เมธอด difference( ) ก็ได้

เราสามารถหาสมาชิกทุกตัวที่มีอยู่เฉพาะใน album_set1 ได้โดยใช้เครื่องหมายลบ -

# หาข้อมูลที่ต่างที่อยู่ใน set1 แต่ไม่อยู่ใน set2

difference1_2 = album_set1 - album_set2  
difference1_2
{'Thriller'}

หรือจะใช้เมธอด เมธอด difference( ) ก็ได้

# หาข้อมูลที่ต่างที่อยู่ใน set1 แต่ไม่อยู่ใน set2

album_set1.difference(album_set2)  
{'Thriller'}

ผลลัพธ์ที่ได้คือ สมาชิกทุกตัวที่มีอยู่เฉพาะใน album_set1 เท่านั้น แสดงได้ดังรูปต่อไปนี้

หากต้องการหาสมาชิกทุกตัวที่มีอยู่เฉพาะใน album_set2 ก็ทำได้โดยวิธีเดียวกัน

# หาข้อมูลที่ต่างที่อยู่ใน set2 แต่ไม่อยู่ใน set1

difference2_1 = album_set2 - album_set1  
difference2_1
{'The Dark Side of the Moon'}
# หาข้อมูลที่ต่างที่อยู่ใน set2 แต่ไม่อยู่ใน set1

album_set2.difference(album_set1)  
{'The Dark Side of the Moon'}

การรวมข้อมูลกัน (Union)

การรวมข้อมูลกัน (Union) เป็นการดึงข้อมูลทั้งหมดจากแต่ละเซ็ตแล้วรวมเข้าด้วยกัน ถ้าข้อมูลซ้ำกันจะดึงข้อมูลดังกล่าวออกมาเพียงข้อมูลเดียว ดังรูป

การรวมข้อมูลสามารถทำได้โดยใช้เครื่องหมายดำเนินการ | หรือจะใช้เมธอด union( ) ก็ได้

การรวมข้อมูลโดยใช้เครื่องหมายดำเนินการ |

# รวมข้อมูลของทั้งสองเซ็ต

union = album_set1 | album_set2
union
{'AC/DC', 'Back in Black', 'The Dark Side of the Moon', 'Thriller'}

หรือจะรวมข้อมูลโดยใช้เมธอด union( ) ก็ได้

# รวมข้อมูลของทั้งสองเซ็ต

album_set1.union(album_set2)
{'AC/DC', 'Back in Black', 'The Dark Side of the Moon', 'Thriller'}

การเลือกข้อมูลจากทุกเซ็ตโดยเลือกเฉพาะข้อมูลที่แตกต่างจากเซ็ตอื่นๆ (Symmetric difference)

คือ การเลือกข้อมูลจากทุกเซตโดยเลือกเฉพาะข้อมูลที่เซตนั้นๆ มีแตกต่างจากเซตอื่น(symmetric difference) คือการดึงข้อมูลที่มีอยู่เฉพาะในแต่ละเซ็ตแต่ไม่มีอยู่ในเซ็ตอื่นๆ ที่นำมาใช้เปรียบเทียบ พูดอีกอย่างหนึ่งก็คือ… การนำสมาชิกของทุกเซ็ตมารวมกัน (Union) แต่ไม่นับเอาสมาชิกมีเหมือนกันหรือมีร่วมกัน (Intersection) นั่นเอง โดยจะใช้เครื่องหมายดำเนินการ ^ (XOR) หรือจะใช้เมธอด symmetric_difference( ) ในการดึงข้อมูลก็ได้

# เลือกข้อมูลจากทุกเซ็ตโดยเลือกเฉพาะข้อมูลที่แตกต่างจากเซ็ตอื่นๆ (Symmetric difference)

symmetric_difference = album_set1 ^ album_set2
symmetric_difference
{'The Dark Side of the Moon', 'Thriller'}

หรือจะรวมข้อมูลโดยใช้เมธอด symmetric_difference( ) ก็ได้

# รวมข้อมูลของทั้งสองเซ็ต

album_set1.symmetric_difference(album_set2)
{'The Dark Side of the Moon', 'Thriller'}

ซึ่งจะมีค่าเท่ากับ การนำสมาชิกของทุกเซ็ตมารวมกัน (Union) แต่ไม่นับเอาสมาชิกมีเหมือนกันหรือมีร่วมกัน (Intersection)

union - intersection
{'The Dark Side of the Moon', 'Thriller'}

การเปรียบเทียบ Sets#

นอกจากนี้ เรายังสามารถทำการเปรียบเทียบ Set เพื่อตรวจสอบความสัมพันธ์ระหว่างเซ็ตสองเซ็ตได้ เช่น ตรวจสอบว่าเซ็ตที่เราต้องการเป็น superset (หรือ power set (เพาเวอร์เซ็ต)) หรือเป็น subset (สับเซ็ต (เซ็ตย่อย)) ของอีกเซ็ตหรือไม่ โดยใช้เมธอด issuperset( ) และ issubset( ) ตามลำดับ

# ตรวจสอบว่าเป็น superset หรือไม่

set(album_set1).issuperset(album_set2) # or
# album_set1.issuperset(album_set2)   
False
# ตรวจสอบว่าเป็น subset หรือไม่

set(album_set2).issubset(album_set1)    # or
# album_set2.issubset(album_set1)     
False

ตัวอย่างถัดไปเป็นตัวอย่างที่ issubset() และ issuperset() คืนค่าจริง (True) ทั้ง 2 ตัวอย่าง

album_set1
{'AC/DC', 'Back in Black', 'Thriller'}
# ตรวจสอบว่าเป็น subset หรือไม่

set({"Back in Black", "AC/DC"}).issubset(album_set1) 
True
# ตรวจสอบว่าเป็น superset หรือไม่

album_set1.issuperset({"Back in Black", "AC/DC"})   
True

[Exercise]#

1. จงแปลงลิสต์ ['rap','house','electronic music', 'rap'] ให้เป็นข้อมูลชนิดเซ็ต

# เขียนโค้ดด้านล่าง แล้วกด Shift+Enter
Click here for the solution
set(['rap','house','electronic music', 'rap']) # {'electronic music', 'house', 'rap'}

2. กำหนด ลิสต์ A = [1, 2, 2, 1] และเซ็ต B = set([1, 2, 2, 1]), ถามว่า sum(A) == sum(B) หรือไม่?

# เขียนโค้ดด้านล่าง แล้วกด Shift+Enter
Click here for the solution
A = [1, 2, 2, 1]  
B = set([1, 2, 2, 1])
print("the sum of A is:", sum(A)) # the sum of A is: 6
print("the sum of B is:", sum(B)) # the sum of B is: 3
print(sum(A)==sum(B)) # False

3. จากเซ็ต frontend_developer_lang และเซ็ต backend_developer_lang ต่อไปนี้ จงสร้างเซ็ตชุดใหม่ all_developer_lang ที่เกิดจากการรวมข้อมูลกัน (Union) ระหว่างสองเซ็ตนี้โดยที่ไม่ใช้เมธอด union()

# เขียนโค้ดต่อด้านล่าง แล้วกด Shift+Enter

album_set1 = set(["Thriller", 'AC/DC', 'Back in Black'])
album_set2 = set([ "AC/DC", "Back in Black", "The Dark Side of the Moon"])
Click here for the solution
frontend_developer_lang = set(['HTML', 'CSS', 'JavaScript', 'Angular', 'ReactJS', 'Node.js', '.Net', 'Python'])
backend_developer_lang = set(['PHP', 'C++', 'Java', 'Python', 'Ruby', 'Node.js', '.Net', 'JavaScript'])

all_developer_lang = set() # สร้างเซ็ตว่าง
all_developer_lang.update(frontend_developer_lang, backend_developer_lang) # เพิ่มเซ็ททั้งสองเข้าเป้นสมาชิก
all_developer_lang```

</details>

4. จากข้อก่อนหน้า จงตรวจสอบว่า frontend_developer_lang เป็น subset ของ all_developer_lang หรือไม่

# เขียนโค้ดด้านล่าง แล้วกด Shift+Enter
Click here for the solution
# เขียนโค้ดด้านล่าง แล้วกด Shift+Enter
frontend_developer_lang.issubset(all_developer_lang) # True

Author#

S.C.

Change Log#

Date

Version

Change Description

08-08-2021

0.1

First edition

05-05-2022

0.2

Fix the typo, minor change