Home / Tuple & Set

Tuple & Set

You are not logged in.

If you are a current student, please Log In for full access to this page.

Table of Contents


1) Tuples

  • tuple เป็นข้อมูลประเภท sequence
  • เก็บข้อมูลอะไรก็ได้ มี index สำหรับเข้าถึงข้อมูลคล้าย list
  • แตกต่างกับ list ที่ tuple ไม่สามารถแก้ไขข้อมูลย่อยได้

1.1) การใช้งาน

  • สร้าง tuple เหมือนสร้าง list แต่ใช้วงเล็บโค้ง () หรือใช้คำสั่ง tuple()
x = 2, 4, 6
y = (8, 2, 4)
print(x)
print(y)
print(y[0])
(2, 4, 6)
(8, 2, 4)
8
t1 = tuple()
t2 = ()
print(t1)
print(t2)
()
()
  • หากมีสมาชิกตัวเดียว แต่อยากให้เป็น tuple จะต้องใส่ comma (,) ด้านหลัง
x = 10,
print(x)
print(len(x))
(10,)
1
x = (10,)
print(x)
print(len(x))
(10,)
1
  • แปลงจาก string/list
t = tuple('mwit')
print(t)
('m', 'w', 'i', 't')
x = [1, 2, 3]
t = tuple(x)
print(t)
for d in t:
    print(d)
(1, 2, 3)
1
2
3
  • ไม่สามารถแก้ไขข้อมูลย่อยได้ แต่สามารถกำหนดค่าทั้ง tuple ใหม่ได้
t = (1,2,3)
t[0] = 10

จะเกิด TypeError

x = 9
t = (1, 2, 3)
t = t + (x,)
t = t + (99,)
print(t)
print(t[2])
(1, 2, 3, 9, 99)
3

1.2) ประโยชน์ของ tuple

  • สามารถเปรียบเทียบได้ โดยจะเปรียบเทียบไล่จากสมาชิกตัวแรก ถ้าหากว่าเท่ากันก็จะเทียบสมาชิกถัดไปเรื่อย ๆ
a = (1, 2, 3, 4)
b = (1, 2, 2, 99)
print(a>b)
True
  • สามารถสลับค่าได้
a = 1
b = 2
a, b = b, a
print(a)
print(b)
2
1
  • เมื่อ return ค่าจากฟังก์ชันหลาย ๆ ค่า มันจะส่งค่ากลับเป็น tuple
  • จากตัวอย่างโค้ดด้านล่าง ฟังก์ชัน min_max จะส่งค่ากลับเป็น tuple ซึ่งจัดเก็บค่าน้อยสุดและมากสุดของ t
def min_max(t):
  return min(t), max(t)
x = [1, -3, 8, 99, 0]
result = min_max(x)
print(result)
ans1, ans2 = min_max(x)
print(ans1)
print(ans2)
(-3, 99)
-3
99
  • argument ที่ไม่รู้จำนวนล่วงหน้า (variable-length argument tuples)
def printall(*txt):
  print(txt)
  print(len(txt))
a = 'hello'
b = 'mwit'
c = 'bye bye'
printall(a, b)
printall(a, b, c)
('hello', 'mwit')
2
('hello', 'mwit', 'bye bye')
3

2) Exercise

2.1) Exercise 1

จงเขียนฟังก์ชัน myavg ดังนี้

  • เป็นฟังก์ชันที่รับ arguments ที่เป็นเลขจำนวนเต็มกี่ตัวก็ได้ แล้วส่งค่ากลับเป็นค่าเฉลี่ยของข้อมูลทั้งหมด

ตัวอย่าง

  • myavg(3, 4, 5, 6, 1, 2) == 3.5
  • myavg(10, 30, 20) == 20.0


2.2) Exercise 2

จงเขียนฟังก์ชัน sumall ดังนี้

  • เป็นฟังก์ชันที่รับ arguments ที่เป็นข้อมูลประเภท iterable (เช่น list, tuple) ที่ภายในเป็นเลขจำนวนเต็มกี่ตัวก็ได้ แล้ว
  • ส่งค่ากลับเป็นผลบวกของข้อมูลทั้งหมด


2.3) Exercise 3

จงเขียนฟังก์ชัน student_bmi เพื่อรับ list ของ tuple (รหัสนักเรียน, น้ำหนัก, ส่วนสูง) ของนักเรียน จากนั้น
  • return list ของ tuple ที่เก็บข้อมูล (รหัสนักเรียน, BMI) ของนักเรียนที่มีค่า BMI มากกว่าค่า BMI เฉลี่ย โดยเรียงลำดับข้อมูลตามลำดับที่กรอกข้อมูลเข้ามา (ดูจากตัวอย่าง)

กำหนดให้ คำนวนหาค่า BMI ด้วยสูตร bmi = weight/(height*height)

ตัวอย่าง

student_bmi([
    ('001', 50, 1.65), 
    ('022', 60, 1.7),
    ('018', 50, 1.52)
])

จะได้ [('022', 20.761245674740486), ('018', 21.641274238227147)]

3) Set


  • set เป็น collection ที่ไม่มีการเรียงและไม่มีการ index (unordered and unindexed)
  • มีลักษณะคล้ายกับเซ็ตทางคณิตศาสตร์
  • เซ็ตสามารถมีสมาชิกเป็น immutable data ใด ๆ ก็ได้ เช่น ตัวเลข สตริง tuple
    • แต่จะมีสมาชิกเป็น mutable data เช่น list ไม่ได้ (อาจะเกิด unhashable error)

3.1) การสร้าง set

A = {1, 2, 3}
B = set('mwit')
C = set()
print(A)
print(B)
print(C)
{1, 2, 3}
{'w', 't', 'i', 'm'}
set()
A = {1, 2, 3}
B = {3, 2, 3, 1}
print(A)
print(B)
print(A == B)
{1, 2, 3}
{1, 2, 3}
True

3.2) การใช้งานต่าง ๆ

  • การเข้าถึงข้อมูล
a = {'ant', 'cat', 'bat'}
for x in a:
  print(x)
print('cat' in a)
print('cat' not in a)
print(len(a))
ant
cat
bat
True
False
3
  • ใช้ sorted หากต้องการเข้าถึงข้อมูลแบบที่เรียงลำดับ
a = {'ant', 'cat', 'bat'}
b = [123, 100, -99]
c = ('an', 'art', 'ant')
for x in sorted(a):
  print(x, end=' ')
print()
for x in sorted(b):
  print(x, end=' ')
print()
for x in sorted(c):
  print(x, end=' ')
print()
ant bat cat 
-99 100 123 
an ant art 
  • add(x) เพื่อเพิ่ม x เข้าใน set
a = {1, 2, 3}
a.add(10)
a.add(3)
a.add('five')
a.add((4, 5))
print(a)
{1, 2, 3, 10, 'five', (4, 5)}
  • update(s) เพื่อเพิ่ม sequence data เข้าใน set
a = {1, 2}
b = {3, 4, 5}
a.update(b)
a.update([10, 20])
a.update('bye')
print(a)
{1, 2, 3, 4, 5, 10, 20, 'e', 'b', 'y'}
  • discard(x) ในการลบ x ออกจาก set
a = {1, 2, 3, 4}
a.discard(2)
print(a)
{1, 3, 4}
  • sets.union(), intersection(), difference() เสมือนทางคณิตศาสตร์
a = {1, 2, 3}
b = {2, 3, 4}
print(a.union(b))
print(a.intersection(b))
print(a.difference(b))
print(a)
print(b)
{1, 2, 3, 4}
{2, 3}
{1}
{1, 2, 3}
{2, 3, 4}
  • ซึ่งใช้ |, &, - แทนได้
a = {1, 2, 3}
b = {2, 3, 4}
print(a | b)
print(a & b)
print(a - b)
print(a)
print(b)
{1, 2, 3, 4}
{2, 3}
{1}
{1, 2, 3}
{2, 3, 4}

4) Exercise

จงเขียนฟังก์ชันเพื่อรับสตริง 2 ตัว แล้ว return ค่าเป็น list ของอักขระที่ปรากฎอยู่ในทั้งสองสตริง ที่เรียงลำดับตามพยัญชนะ (กำหนดให้แปลงสตริงทั้งสองสตริงให้เป็นตัวพิมพ์ใหญ่ทั้งหมดก่อน แล้วจึงหาตัวอักษรที่ปรากฏในทั้งสองสตริงนั้น) ตามตัวอย่าง

ตัวอย่างการเรียกใช้ฟังก์ชัน common_char เช่น
common_char("book", "bank") == ['B', 'K']