" is the source's; see docs/gaps/session-11.md -->
print(name, "-->" grade)
grades[0][1] = "F"
grades[0] = (grades[0][0], "F")
grades = ((grades[0][0], "F"),) + grades[1:]
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
6
แบบฝึกหัด: Polynomial
4
x
2
+ 3
x
– 1
แทนด้วย
[(4, 2), (3, 1), (-1, 0)]
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
7
Set
set เป็นที่เก็บข้อมูลที่ไม่ซ้ำกัน และไม่มีลำดับ
ข้อมูลที่เก็บใน set ต้องเปลี่ยนแปลงไม่ได้
–
เก็บ int, float, bool, str, tuple
–
เก็บ list, dict, set ไม่ได้
s = {4, 3, 1, 2}
s = set() ได้เซตว่าง
แต่ { } ได้ dict
ว่าง
ใช้ len(s), if e in s, และ for e in s ได้
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
8
Set Methods
A = {1,2,3,4,5}
B = {3,4,5,6,7}
C = A.union(B) # {1,2,3,4,5,6,7}
C = A | B # {1,2,3,4,5,6,7}
C = A.intersection(B) # {3,4,5}
C = A & B # {3,4,5}
C = A.difference(B) # {1,2}
C = A - B # {1,2}
C.add(9) # {1,2,9}
C.remove(1) # {2,9}
print( A <= B, A.issubset(B) ) # True True
for e in A:
print(e)
C = A ^ B
A
B
A-B
A&B
B-A
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
9
การสร้างเซตจากข้อมูลในที่เก็บต่าง ๆ
s = set(
d
)
เหมือนกับ
s = set()
for e in
d
:
s.add(e)
s = set( [1,2,3,1] )
s = set( (1,2,3,1) )
s = set( "Mono" )
s = set( {"A":2, "B":2} )
s = set( {1,2,3} )
s = set( range(1,7,2) )
➔
➔
➔
➔
➔
➔
s = {1,2,3}
s = {1,2,3}
s = {"M", "o", "n"}
s = {"A", "B"}
s = {1,2,3}
s = {1,3,5}
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
11
การสร้างลิสต์จากข้อมูลในที่เก็บต่าง ๆ
x = list(
d
)
เหมือนกับ
x = []
for e in
d
:
x.append(e)
x = list( [1,2,3,1] )
x = list( (1,2,3,1) )
x = list( "Mono" )
x = list( {"A":2, "B":2} )
x = list( {1,2,3} )
x = list( range(1,7,2) )
➔
➔
➔
➔
➔
➔
x = [1,2,3,1]
x = [1,2,3,1]
x = ["M", "o", "n", "o"]
x = ["A", "B"]
x = [1,2,3]
x = [1,3,5]
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
12
การสร้างทูเปิลจากข้อมูลในที่เก็บต่าง ๆ
t = tuple( [1,2,3,1] )
t = tuple( (1,2,3,1) )
t = tuple( "Mono" )
t = tuple( {"A":2, "B":2} )
t = tuple( {1,2,3} )
t = tuple( range(1,7,2) )
➔
➔
➔
➔
➔
➔
t = (1,2,3,1)
t = (1,2,3,1)
t = ("M", "o", "n", "o")
t = ("A", "B")
t = (1,2,3)
t = (1,3,5)
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
13
sort vs. sorted
def sorted(x) :
out = []
for e in x:
out.append(e)
out.sort()
return out
sorted(x) เป็น built-in
function ที่นำข้อมูลใน x
มาเรียงลำดับข้อมูล แล้วคืน
ผลลัพธ์กลับมาเป็นลิสต์
ส่วน x ยังเหมือนเดิม
x = sorted( [1,4,3,2] )
x = sorted( {1,4,3,2} )
x = sorted( "hello" )
x = sorted( {22:2, 90:3, 3:23} )
➔
➔
➔
➔
x = [1, 2, 3, 4]
x = [1, 2, 3, 4]
x = ["e", "h", "l", "l", "o"]
x = [3, 22, 90]
x = [1, 4, 3, 2]
x.sort() # sort
ใช้กับ
list
เท่านั้น
สังเกตความแตกต่างในการใช้
x.sort() กับ sorted( x )
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
14
for elem in a_set
ข้อมูลถูกหยิบจากเซตออกมาด้วยลำดับที่ไม่แน่นอน
55555
11111
66666
22222
33333
44444
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
15
if e in set ทำงานเร็วกว่า if e in list
import time
def search_all(X):
b = time.time()
n = len(X)
for i in range(n):
if i in X: # True
pass
for i in range(n):
if (n+1) in X: # False
pass
print(time.time() - b)
n = 50000
L = []
for i in range(n):
L.append(i)
S = set()
for i in range(n):
S.add(i)
search_all(L)
search_all(S)
41.84556722640991
0.0149579048156738
หน่วยเป็นวินาที
การค้นใน set
เร็วกว่า list
มาก
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
16
ตัวอย่าง: ฟังก์ชันตรวจข้อมูลซ้ำกันในลิสต์
def has_duplicate( x ):
for i in range(len(x)-1):
for j in range(i+1, len(x)):
if x[i] == x[j]:
return True
return False
def has_duplicate( x ):
d = sorted(x)
for i in range(len(x)-1):
if d[i] == d[i+1]:
return True
return False
[2, 3, 4, 5, 6, 6, 6, 7, 8, 8, 8, 9]
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
17
ตัวอย่าง: ฟังก์ชันตรวจข้อมูลซ้ำกันในลิสต์
def has_duplicate( x ):
s = set( x )
return len(s) != len(x)
def has_duplicate( x ):
s = set()
for e in x:
if e in s:
return True
s.add(e)
return False
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
18
ตัวอย่าง: หาสองจำนวนต่างกันที่รวมกันได้ k
x = [int(e) for e in input().split()]
d = set(x)
k = int(input())
soln = []
for e in d:
e1 = k - e
if e < e1 and e1 in d:
soln.append((e, e1))
if len(soln)==0:
print("Not found")
else:
print(soln)
9
Shake It Off, Taylor Swift, Pop, 3:39
Rolling In The Deep, Adele, Pop, 3:48
Chandelier, Sia, Pop, 3:36
Roar, Katy Perry, Pop, 3:42
Hotel California, Eagle, Rock, 6:30
We Are the Champions, Queen, Rock, 2:59
Hello Dolly, Louis Armstrong, Jazz, 2:27
Bohemian Rhapsody, Queen, Rock, 5:55
Coward of the County, Kenny Rogers, Country, 4:20
name = input().strip()
print(name, "starred in", ", ".join( series[name] ))
{str: set}
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
28
ตัวอย่าง: ตัวการ์ตูน
Ted, bear
Pongo, dog
Fozzie, bear
Winnie-the-Pooh, bear
Nana, dog
Scooby Doo, dog
Garfield, cat
Yogi, bear
Tom, cat
Sylvester, cat
Figaro, cat
Pluto, dog
Baloo, bear
Goofy, dog
Felix, cat
q
{'bear':
{'Ted', 'Fozzie'
'Winnie-the-Pooh',
'Yogi', 'Baloo'},
'dog':
{'Pongo', 'Nana',
'Scooby Doo',
'Pluto', 'Goofy'},
'cat':
{'Garfield', 'Tom',
'Sylvester',
'Figaro', 'Felix'}}
{ str: set }
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
29
ตัวอย่าง: ตัวการ์ตูน
cartoon = {}
x = input()
while x != 'q':
name, atype = x.split(", ")
if atype not in cartoon:
cartoon[atype] = {name}
else:
cartoon[atype].add(name)
x = input()
print(cartoon)
Ted, bear
Pongo, dog
Fozzie, bear
Winnie-the-Pooh, bear
Nana, dog
Hello Kitty, cat
Scooby Doo, dog
Garfield, cat
Yogi, bear
Tom, cat
Sylvester, cat
Pluto, dog
Goofy, dog
q
Civic
Fortuner
Vios
Wave
Honda
Toyota
Toyota
Honda
Civic Honda
Fortuner
Toyota
Vios Toyota
Wave Honda
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
32
ตัวอย่าง: reverse mapping
def reverse( d ): #
กรณีที่ value ไม่ซ้ำกัน
r = { }
for k,v in d.items():
r[v] = k
return r
if v not in r:
r[v] = {k}
else:
r[v].add(k)
def reverse( d ): #
กรณีที่ value อาจซ้ำกัน
r = { }
for k,v in d.items():
if v not in r:
r[v] = set()
r[v].add(k)
return r
{ "Vios": "Toyota", "Fortuner": "Toyota",
"Wave": "Honda", "Civic": "Honda" }
d
{ "Toyota": {"Vios", "Fortuner"},
"Honda": {"Wave", "Civic" }
r
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
33
แบบฝึกหัด: ใครร้องเพลงนี้
11
Hello, Adele
Shake It Off, Taylor Swift
Chandelier, Sia
You've got a Friend, Carol King
Hello, Lionel Richie
What a Wonderful World, Anne Murray
Hello, Prince
What a Wonderful World, Louis Armstrong
You've got a Friend, James Taylor
What a Wonderful World, Rod Stewart
Hello, Sai Wa Si Bor Tim Gun, You've got a Friend
Hello -> Adele, Lionel Richie, Prince
Sai Wa Si Bor Tim Gun -> Not found
You've got a Friend -> Carol King, James Taylor