set
μλ£νμ μ§ν©μ ν΄λΉνλ μλ£νμ΄λ©°, μνμμ λ°°μ΄ μ§ν© κ°λ
κ³Ό λμΌνλ€.
primes_below_10 = {2, 3, 7, 5, 7, 3}
primes_below_10
μμμ κ°μλ len
ν¨μλ₯Ό μ΄μ©νμ¬ νμΈνλ€.
len(primes_below_10)
곡μ§ν©μ set()
μΌλ‘ μμ±νλ©°, μμ μΆκ°λ add
λ©μλλ₯Ό νμ©νλ€.
s = set()
s.add(1)
s.add(2)
s.add(2)
print(s)
μμμ ν¬ν¨μ¬λΆλ in
μ°μ°μλ₯Ό νμ©νμ¬ νμΈνλ€.
2 in s
3 in s
리μ€νΈμ μ€λ³΅μΌλ‘ ν¬ν¨λ νλͺ©μ μ½κ² μ κ±°ν μ μλ€.
item_list = [1, 2, 3, 1, 2, 3]
item_set = set(item_list)
distinct_item_list = list(item_set)
print(distinct_item_list)
리μ€νΈμ μ€λ³΅μΌλ‘ ν¬ν¨λ νλͺ©μ΄ μ‘΄μ¬νλκ°λ₯Ό μ½κ² νλ¨ν μ μλ€. μλ₯Ό λ€μ΄, μλ ν¨μλ μ€λ³΅ ν¨μμ ν¬ν¨μ¬λΆλ₯Ό νλ¨ν΄μ€λ€.
def has_duplicates(t):
return len(set(t)) < len(t)
has_duplicates(item_list)
κΈΈμ΄κ° λ§€μ° κΈ΄ 리μ€νΈλ₯Ό λμμΌλ‘ νλͺ©μ μ‘΄μ¬μ¬λΆλ₯Ό νλ¨ν λ μ§ν© μλ£νμΌλ‘ νλ³νμ νλ©΄ λ§€μ° λΉ λ₯΄κ² ν΄κ²°ν μ μλ€.
hundreds_of_other_words = [] # λ§€μ° κΈ΄ 리μ€νΈλΌ μμνλ€.
stopwords_list = ["a", "an", "at"] \
+ hundreds_of_other_words + ["yet", "you"]
print("zip" in stopwords_list) # νμΈ κ³Όμ μ΄ λ리λ€.
stopwords_set = set(stopwords_list)
print("zip" in stopwords_set) # λ§€μ° λΉ λ₯΄κ² νμΈνλ€.
λΆλΆμ§ν© κ΄κ³λ₯Ό μ΄μ©ν μ μλ€. μλ₯Ό λ€μ΄, μλ ν¨μλ 첫째 μΈμμ 리μ€νΈμ ν¬ν¨λ λͺ¨λ μμκ°, λμ§Έ μΈμμ 리μ€νΈμ νλͺ©μΌλ‘ ν¬νλλμ§ μ¬λΆλ₯Ό νλ¨νλ€.
μ£Όμ: <=
μ°μ°μλ μ§ν©μ λμμΌλ‘ ν κ²½μ° λΆλΆμ§ν© κ΄κ³λ₯Ό κ²°μ νλ€.
def sublist(list1, list2):
return set(list1) <= set(list2)
sublist(item_list, distinct_item_list)
μλ΄: Think Python 11μ₯ λ΄μ©μ μΌλΆλ₯Ό λ²μ λ° μμ½μμ νμ¬ μ 리ν λ΄μ©μ λλ€.
μ¬μ μλ£κ°μ μΌμ’ μ μλ€μ μ§ν©μ΄λ©°, κ° μμ ν€(key)μ κ°(value)μΌλ‘ μ΄λ£¨μ΄μ Έ μλ€.
μλ₯Ό λ€μ΄, μ μμμ΄μ¬μ μμ 'school'μ΄λ λ¨μ΄μ λ»μ λ¬ΌμΌλ©΄ 'νκ΅'λΌλ λ»μ μλ €μ£Όλλ° μ¬κΈ°μ 'school'μ΄ ν€μ ν΄λΉνκ³ 'νκ΅'κ° κ°μ ν΄λΉνλ€. λ°λΌμ μ μμμ΄μ¬μ μ μ΄λ¬ν ν€μ κ°λ€μ μμ 무μν λ§μ΄ λͺ¨μλμ μ§ν©μ΄λΌκ³ μκ°ν μ μλ€.
μ¬μ μ ν¬ν¨λ νλͺ©μ ν€μ κ°μΌλ‘ μ΄λ£¨μ΄μ§ μμ΄λ€. κ°κ°μ νλͺ©μ ν€μ κ·Έ ν€μ μ°κ΄λ κ°λ€μ λν μ 보λΌκ³ μ΄ν΄νλ©΄ λλ€.
μ¬κΈ°μλ μνμ¬μ μ μμ±νλ μμ λ₯Ό ν΅ν΄ μ¬μ μλ£νμ νμ©μ μ€λͺ νκ³ μ νλ€.
λ¨Όμ λΉ μ¬μ μ μμ±νλ€.
λΉ μ¬μ μ μμ±νλ €λ©΄ dict
ν¨μλ₯Ό νμ©νκ±°λ λ¨μν μλμ κ°μ΄ μ μΈνλ©΄ λλ€.
eng2kr = dict()
print(eng2kr)
λλ
eng2kr = {}
print(eng2kr)
μ£Όμ: μ€κ΄νΈ({}
)λ λΉ λμ
λ리λ₯Ό λνλΈλ€.
μ¬μ μ νλͺ©μ μΆκ°νλ €λ©΄ ν€μ κ°μ κ΄κ³λ₯Ό λκ΄νΈ μ°μ°μλ₯Ό μ΄μ©νμ¬ μ§μ νλ©΄ λλ€. μλ₯Ό λ€μ΄, μλ¨μ΄ oneκ³Ό νκΈ λ» μΌ, νλλ₯Ό μ°κ΄μ§μΌλ €λ©΄ λ€μκ³Ό κ°μ΄ νλ€.
eng2kr['one'] = 'μΌ, νλ'
μ¬μ μ ν¬ν¨λ λ΄μ©μ νμΈνλ©΄ ν€μ κ° μ¬μ΄μ μ½λ‘ μ΄ λ€μ΄κ° ν€μ κ°μ μμ λ³Ό μ μλ€.
print(eng2kr)
νλͺ©μ νλ λ μΆκ°ν΄λ³΄μ.
eng2kr['three'] = 'μΌ, μ
'
print(eng2kr)
μλμ κ°μ΄ μ¬μ μ λ°λ‘ μ μΈν μλ μλ€.
dict_exp = {'one':'μΌ, νλ', 'two':'μ΄, λ', 'three':'μΌ, μ
'}
print(dict_exp)
'eng2kr'μ νλͺ©μ νλ λ μΆκ°ν΄λ³΄μ.
eng2kr['two'] = 'μ΄, λ'
print(eng2kr)
μμ΄μ¬μ μ μ΄λ€ λ¨μ΄κ° λͺ λ²μ§Έμ μμΉνλκ°λ μ ν μ€μνμ§ μλ€. λμ μ μ΄λ€ ν€κ° μ¬μ©λμλκ°λ§ μ€μνλ€.
[]
) 연산자¶λκ΄νΈ μ°μ°μλ νλͺ©μ μΆκ°ν λμ ν¨κ² νλͺ©μ νμΈνκ±°λ μ λ°μ΄νΈ ν λλ μ¬μ©νλ€. μλ₯Ό λ€μ΄, 'one'μ λμνλ κ°μ νμΈνκ³ μ νλ©΄ λ€μκ³Ό κ°μ΄ λκ΄νΈλ₯Ό μ¬μ©νλ μΈλ±μ±μ μ΄μ©νλ€.
print(eng2kr['one'])
ν€μ μ°κ΄λ κ°μ μ λ°μ΄νΈ νλ €λ©΄ μλ‘κ² μ§μ νλ©΄ λλ€.
eng2kr['one'] = 'μΌ, νλ, νλ², μ μΌν'
print(eng2kr)
λ§μ½ ν€κ° μ¬μ μ μ¬μ©λμ§ μμμΌλ©΄ μ€λ₯(KeyError
)κ° λ°μνλ€.
print(eng2kr['four'])
μ¬μ μ ν¬ν¨λ νλͺ©μ κ°μλ₯Ό νμΈμμΌμ£Όλ ν¨μμ΄λ€.
len(eng2kr)
νΉμ ν€κ° μ¬μ μ μ¬μ©λμλμ§ μ¬λΆλ₯Ό νμΈνλ€.
'one' in eng2kr
'four' in eng2kr
keys
메서드¶μ¬μ μ μ¬μ©λ ν€λ€μ λͺ¨λ λͺ¨μμ 리μ€νΈμ λΉμ·ν μλ£νμ λ§λ€μ΄μ 리ν΄νλ€.
μ£Όμ: 리μ€νΈμλ λ€λ₯΄μ§λ§ λ§€μ° λΉμ·νλ€.
keys = eng2kr.keys()
print(keys)
μλ λ μ½λλ λμΌν μΌμ μννλ€.
'one' in eng2kr
'one' in eng2kr.keys()
values
메서드¶μ¬μ μ μ¬μ©λ κ°λ€μ λͺ¨λ λͺ¨μμ 리μ€νΈμ λΉμ·ν μλ£νμ λ§λ€μ΄μ 리ν΄νλ€.
μ£Όμ: 리μ€νΈμλ λ€λ₯΄μ§λ§ λ§€μ° λΉμ·νλ€.
values = eng2kr.values()
print(values)
κ°μΌλ‘ μ¬μ©λμλκ° μ¬λΆλ₯Ό μ΄μ©νλ €λ©΄ values
λ©μλλ₯Ό νμ©νλ©΄ λλ€.
'μ΄' in eng2kr.values()
'μ¬' in eng2kr.values()
items
메서드¶μ¬μ μ ν¬ν¨λ νλͺ©λ€μ μμμλ€μ 리μ€νΈλ‘ λ³ννλ€. κ°κ°μ μμμμ ν€μ κ°μΌλ‘ μ΄λ£¨μ΄μ§, μ¦ κΈΈμ΄κ° 2μΈ ννμ΄λ€.
μ£Όμ: 리μ€νΈμλ λ€λ₯΄μ§λ§ λ§€μ° λΉμ·νλ€.
values = eng2kr.items()
print(values)
μ¬μ μ νλͺ©μ ννλ‘ νλμ© νμΈν΄λ³΄μ. νλͺ©λ€μ΄ κΈΈμ΄κ° 2μΈ ννλ‘ κ΅¬μ±λκΈ°μ λ³μ λ κ°μ κ°κ° ν λΉν μ μλ€.
for eng, kor in eng2kr.items():
print(f"{eng}μ λ»μ {kor}μ
λλ€.")
μμ΄ λ¨μ΄μ μ¬λ¬ λ»μ΄ μμ μ μκΈ° λλ¬Έμ κ·Έκ²μ λ³΄λ€ μμΈν 보μ¬μ€ μλ μλ€.
κ·Έλ¬κΈ° μν΄ λ¬Έμμ΄μ split
κ³Ό join
λ©μλλ₯Ό νμ©νλ€.
μ°Έκ³ : split
/join
λ©μλμ νμ©μ λ¬Έμμ΄ λλκΈ°/ν©μΉκΈ°μ μ’ λ λ€μν μμ κ° μμ.
for eng, kor in eng2kr.items():
meaning = kor.split(', ')
print(f"{eng}μ λ»μ {' λλ '. join(meaning)}μ
λλ€.")
μ°κ΄λ°°μ΄ νμ©μμ λ€λ£¬ λ€μ΄λΉ κΈ°λ‘μ μ¬μ μλ£νμΌλ‘ μ μ₯νλ ν¨μλ λ€μκ³Ό κ°λ€.
def scoreDict(fileName):
try:
result_f = open(fileName, 'r')
except FileNotFoundError:
print("μ΄κ³ μ νλ νμΌμ΄ μ‘΄μ¬νμ§ μμ΅λλ€.")
score_dict = dict()
for line in result_f:
name, score = line.split()
try:
score_dict[float(score)] = name
except:
continue
result_f.close()
return score_dict
μ ν¨μλ₯Ό 5m λ€μ΄λΉ κΈ°λ‘κ³Ό ν¨κ» νΈμΆνλ©΄ κΈ°λ‘μ μ¬μ μλ£νμΌλ‘ μ μ₯ν μ μλ€.
scores = scoreDict('./data/results5m.txt')
print(scores)
κ·Έλ°λ° scoreDict
ν¨μλ μ μλ€μ μ±μ μ ν€λ‘, ν΄λΉ μ±μ μ λΈ μ μ μ΄λ¦μ κ°μΌλ‘ μ¬μ©νλ€.
κ·Έλ κ² ν μ΄μ λ μ λ ¬μ μ΄μ©νμ¬ λ±μλ₯Ό μ νκΈ° μν΄μ μλ€.
μ¬κΈ°μλ μ μμ΄λ¦μ ν€λ‘, ν΄λΉ μ μμ μ±μ μ κ°μΌλ‘ νμ©ν΄λ³΄μ.
κ·Έλ¬κΈ° μν΄ scoreDict
λ₯Ό μλμ κ°μ΄ μ½κ° μμ νλ©΄ λλ€.
def nameScoreDict(fileName):
try:
result_f = open(fileName, 'r')
except FileNotFoundError:
print("μ΄κ³ μ νλ νμΌμ΄ μ‘΄μ¬νμ§ μμ΅λλ€.")
nameScore_dict = dict() # μ΄λ¦μ ν€λ‘ μ¬μ© μμ
for line in result_f:
name, score = line.split()
try:
nameScore_dict[name] = float(score) # μ΄λ¦μ ν€λ‘, μ±μ μ κ°μΌλ‘.
except:
continue
result_f.close()
return nameScore_dict
5m λ€μ΄λΉ κΈ°λ‘μ λ€μ μ½μ΄μ¨λ€.
nameScores = nameScoreDict('./data/results5m.txt')
print(nameScores)
μ΄μ μ μ μ΄λ¦μ μ§μ νλ©΄ ν΄λΉ μ μμ μ μλ₯Ό μΈλ±μ±μ νμ©νμ¬ νμΈν μ μλ€.
nameScores['κΆμ€κΈ°']
nameScores['μ΄μ€μ©']
μ¬μ μ for
λ°λ³΅λ¬Έμ μ¬μ©νλ©΄ μ¬μ μ ν€λ₯Ό κΈ°μ€μΌλ‘ λ°λ³΅λ¬Έμ μ€ννλ€.
μλ μμ λ nameScores
μ μ μ λ κ°λ€μ
νμΌμ λ΄μ©κ³Ό λμΌν λͺ¨μμΌλ‘ νλμ© μΆλ ₯νλ€.
for key in nameScores:
print(key, nameScores[key])
μλ μ½λλ μ μ½λμ λμΌν κΈ°λ₯μ μννλ€.
for key in nameScores.keys():
print(key, nameScores[key])
λ¬Έμμ΄μ μ¬μ©λ κ°κ°μ λ¬Έμκ° λͺ λ²μ© μ¬μ©λμλμ§λ₯Ό νμΈνλ ν¨μλ₯Ό μ¬μ μ μ΄μ©νμ¬ μ½κ² ꡬνν μ μλ€.
def histogram(word):
counts = dict()
for c in word:
if c not in counts: # μνλ²³μ΄ μ²μ μ¬μ©λ κ²½μ°
counts[c] = 1 # counts μ¬μ μ ν€μ μΉ΄μ΄νΈ κ° μΆκ°
else: # μνλ²³μ΄ μ΄λ―Έ μ¬μ©λ κ²½μ°
counts[c] += 1 # κΈ°μ‘΄μ μΉ΄μ΄νΈ κ° 1 μ¦κ°
return counts
histogram('HelloPython')
μλμ μ μλ ν¨μ print_hist
λ κ° ν€μ λμνλ κ°μ μΈμνλ€.
def print_hist(a_dict):
for key in a_dict:
print(key, a_dict[key])
μμ ꡬνν 'histogram' ν¨μμ 리ν΄κ°μ νμ©νλ©΄ λ€μκ³Ό κ°λ€.
countHelloPython = histogram('HelloPython')
print_hist(countHelloPython)
νΌλ³΄λμ°(Fibonacci) μμ΄μ μλμ κ°μ΄ μ κ°λλ€.
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
μ¦, μμ΄μ 첫째, λμ§Έ νλͺ©μ 1μ΄λ©°, μ μ§Έ νλͺ©μ 첫째μ λμ§Έ νλͺ©μ ν©, λ·μ§Έ νλͺ©μ λμ§Έμ μ μ§Έ νλͺ©μ ν©, λ±μΌλ‘ μ§νλλ€. nμ΄ 2λ³΄λ€ ν΄ κ²½μ°, μ΄λ₯Ό μΌλ°ννλ©΄ (n) λ²μ§Έ νλͺ©μ (n-1) λ²μ§Έ νλͺ©κ³Ό (n-2) λ²μ§Έ νλͺ©μ ν©μ΄λ©°, μ΄λ₯Ό μμμΌλ‘ νννλ©΄ λ€μκ³Ό κ°λ€.
fib(0) = 1
fib(1) = 1
fib(n) = fib(n-1) + fib(n-2)
μ¬κ·ν¨μλ₯Ό μ΄μ©νλ©΄ μ½κ² fib
ν¨μλ₯Ό ꡬνν μ μλ€.
def fib(n):
if n in {0, 1}:
return 1
else:
return fib(n-1) + fib(n-2)
μ€μ λ‘ μ μλνλ κ²μΌλ‘ 보μΈλ€.
fib(0)
fib(1)
fib(2)
fib(3)
fib(5)
fib(10)
κ·Έλ°λ° 40λ²μ§Έ νΌλ³΄λμ° μ κ³μ°μ΄ μ¬λ 걸릴 μ μλ€. μ§κΈ μ¬μ©νλ μ»΄ν¨ν°λ‘ 20μ΄ μ΄μ κ±Έλ¦°λ€. νμ¬ μ¬μ©λ μ»΄ν¨ν° μ¬μμ λ€μκ³Ό κ°λ€.
μ£Όμ:
time
λͺ¨λμ time
ν¨μλ₯Ό νμ©νλ€.int
ν¨μλ₯Ό λΆλμμμ μ μΈμλ‘ μ¬μ©νλ©΄ μμμ μ΄νλ₯Ό λ²λ¦°λ€.import time # time λͺ¨λ λΆλ¬μ€κΈ°
start_time = time.time() # μ€ν μμ μκ° κΈ°μ΅
fib(39)
end_time = time.time() # μ€ν μ’
λ£ μκ° κΈ°μ΅
elapsed_time = end_time - start_time
print(f'μ½ {int(elapsed_time)}μ΄ κ±Έλ Έμ΅λλ€.')
νμ§λ§ 1,000λ²μ§Έ νΌλ³΄λμ° μλ₯Ό ꡬνλ €λ μλλ μ¬λ§νλ©΄ νμ§ μλ κ² μ’λ€.
λλΆλΆ μ€κ°μ μ€λ₯κ° λ°μνκ±°λ μλλ©΄ λ§€μ° μ€λ 걸릴 μ μκΈ° λλ¬Έμ΄λ€.
μ€μ λ‘ fib(n)
μ κ³μ°νκΈ° μν΄ fib
ν¨μλ₯Ό λλ΅ $2^{n-1}$λ² νΈμΆν΄μΌ νλ€.
μλ₯Ό λ€μ΄, fib(5)
λ₯Ό κ³μ°νκΈ° μν΄ fib
ν¨μλ₯Ό 15λ² νΈμΆνλ€.
<κ·Έλ¦Ό μΆμ²: νΌλ³΄λμ° μ κ³μ°νκΈ°>
PythonTutor: νΌλ³΄λμ° μ¬κ·ν¨μμμ
fib
ν¨μμ μΈμλ₯Ό λ³κ²½ν΄ 보면μ μ€νμ μλν΄ λ³΄λ©΄ κ³μ°μ μΌλ§λ λ§μ΄ νκ³ ,
λ λ©λͺ¨λ¦¬λ₯Ό μΌλ§λ λ§μ΄ μ¬μ©νλμ§ λμΌλ‘ νμΈν μ μλ€.
μ°Έκ³ λ‘ νμ¬ Python Tutorμμ μΈμλ‘ μ¬μ©ν μ μλ νκ³λ 10μ΄λ€. μ€μ λ‘
n > 10μ λν΄μλ PythonTutor μλ²μ μ ν λλ¬Έμ μ€νλμ§ μλλ€.
μ¬κ·λ‘ ꡬνλ fib
ν¨μμ κ·Όλ³Έμ μΈ λ¬Έμ λ PythonTutor μμ μμ
νμΈν μ μλ―μ΄ λ°λ³΅μ μΈ κ³μ°μ λ무 λ§μ΄ νλ κ²μ΄λ€.
무μ보λ€λ n=39μ κ°μ μμ μΈμμ λν΄μ 20μ΄ μ΄μ 걸리λ κ³μ°μ λ¬Έμ κ° λ§μΌλ©°,
μ’ λ ν° μΈμλ μμ κ³μ°μ ν μλ μλ€.
μ΄μ λν ν΄κ²°μ±
μ λμ κ³ν(dynamic programming)μ΄ μ 곡νλ€.
λμ κ³νμ λ°λ³΅μ μΈ κ³μ°μ νμ§ μλλ€.
μλ₯Ό λ€μ΄,fib(5)
λ₯Ό κ³μ°νλ €λ©΄ fib(4)
, fib(3)
, fib(2)
fib(1)
, fib(0)
λ±μ νλ€μ΄(top-down) λ°©μμΌλ‘ κ³μ°ν΄μΌ νλ€.
νμ§λ§ fib(0)
, fib(1)
, fib(2)
, fib(3)
, fib(4)
, fib(5)
λ±μ λ°ν
μ
(bottom-up) λ°©μμΌλ‘ κ³μ°νμ¬ μ μ₯νλ λ°©μμ μ¬μ©νλ©΄
λ³΄λ€ λΉ λ₯΄κ³ ν¨μ¨μ μΌλ‘ κ³μ°ν μ μλ€.
μ΄λ° λ°©μμ λμ κ³νμ΄λΌ λΆλ₯Έλ€.
μ΄μ λμ κ³ν λ°©μμΌλ‘ νΌλ³΄λμ° μμ΄μ κ³μ°νλ ν¨μλ₯Ό ꡬνν΄λ³΄μ. μ΄λ―Έ κ³μ°λ νΌλ³΄λμ° μλ₯Ό κΈ°μ΅νκΈ° μν΄ λ¦¬μ€νΈλ₯Ό νμ©νλ€.
λ¨Όμ μλμ κ°μ΄ n λ²μ§Έ νΌλ³΄λμ° μλ₯Ό (n-1) λ² μΈλ±μ€μ κ°μΌλ‘ μ μ₯νλ λ°©μμ μ¬μ©ν μ μλ€.
def fibListLong(n):
known_nums = [1, 1] # 첫λ²μ§Έ, λλ²μ¬ νΌλ³΄λμ° μ
for k in range(2, n+1):
res = known_nums[k-1] + known_nums[k-2] # (k+1) λ²μ§Έ νΌλ³΄λμ° μ κ³μ°
known_nums.append(res) # kλ² μΈλ±μ€μ κ°μ΄ (k+1) λ²μ§Έ νΌλ³΄λμ° μ
return known_nums[-1] # λ§μ§λ§ νλͺ© μΆλ ₯
μμ κ°μ΄ νλ©΄ 40λ²μ§Έ νΌλ³΄λμ° μλ₯Ό λ¨λ²μ ꡬν΄μ€λ€.
fibListLong(39)
μ¬μ§μ΄ 1,001 λ²μ§Έ κ°λ κΈλ°© ꡬνλ€.
fibListLong(1000)
μ€ν κ²°κ³Ό μλ§λ² μ§Έ νΌλ³΄λμ° μλ κΈλ°© ꡬνλ€.
start_time = time.time()
fibNum100000 = fibListLong(100000)
end_time = time.time()
elapsed_time = end_time - start_time
print(f'μ½ {elapsed_time}μ΄ κ±Έλ Έμ΅λλ€.')
κ·Έλ°λ° λ°±λ§λ²μ§Έ νΌλ³΄λμ° μλ κ³μ°νμ§ λͺ»νλ€.
μ΄μ λ known_nums
κ° κ°λ¦¬ν€λ 리μ€νΈμ κΈΈμ΄κ° μ μ κΈΈμ΄μ§λ©΄μ
λμμ νλͺ©μ μ¬μ©λλ κ°λ€ μμ λ§€μ° ν° μκ° λκΈ° λλ¬Έμ΄λ€.
μ€μ λ‘ μλ§μΌλ²μ§Έ νΌλ³΄λμ° μλ λ€μ― νλ©΄μ κ±Έμ³μ νκΈ°λ μ λλ‘ ν¬λ€.
μ ν¨μλ₯Ό μ½κ° μ κ·Έλ μ΄λ ν μ μλ€. νΌλ³΄λμ° μλ₯Ό κ³μ°νκΈ° μν΄ νμν κ±°λ μ΄μ μ κ³μ°λ λ κ°μ μ λΏμ΄λ€. λ°λΌμ κ·ΈλκΉμ§μ λͺ¨λ μλ₯Ό κΈ°μ΅ν νμκ° μλ€. μ΄ μμ΄λμ΄λ₯Ό μ΄μ©νμ¬ μλμ κ°μ΄ ꡬννλ©΄ λ°±λ§λ²μ§Έ νΌλ³΄λμ° μλ κ³μ°ν μ μλ€.
def fibList(n):
known_nums = [1, 1] # 첫λ²μ§Έ, λλ²μ¬ νΌλ³΄λμ° μ
for k in range(2, n+1):
res = known_nums[1] + known_nums[0] # μλ‘μ΄ νΌλ³΄λμ° μ κ³μ°
known_nums[0] = known_nums[1] # 리μ€νΈ μ
λ°μ΄νΈ
known_nums[1] = res
return known_nums[1] # λμ§Έ νλͺ© μΆλ ₯
fibList(1000)
μλ§μΌλ²μ§Έ νΌλ³΄λμ° μλ λκΉλΉ‘ν μ¬μ΄μ κ³μ°νλ€. λ°λ‘ μΆλ ₯νλ©΄ λ무 ν° μμ΄κΈ°μ λ³μμ ν λΉνλ μμΌλ‘ ν΄μ κ³μ°μ΄ κ°λ₯νμ§λ§ νμΈν΄λ³΄μ.
start_time = time.time()
fibNum100000 = fibList(100000)
end_time = time.time()
elapsed_time = end_time - start_time
print(f'μ½ {elapsed_time}μ΄ κ±Έλ Έμ΅λλ€.')
λ°±λ§μΌλ²μ§Έ νΌλ³΄λμ° μλ 10μ¬μ΄ λ§μ κ³μ°ν΄μ€λ€.
start_time = time.time()
fibNum1M = fibList(1000000)
end_time = time.time()
elapsed_time = end_time - start_time
print(f'μ½ {elapsed_time}μ΄ κ±Έλ Έμ΅λλ€.')
μ²λ§μΌλ²μ§Έ μλ κ½€ μ€λ κ±Έλ¦°λ€. λͺ λΆ κΈ°λ€λ €λ κ³μ κ³μ°μ€μ΄λΌ μ μ§μμΌ°λ€.
μμ κΈΈμ΄κ° 2μΈ λ¦¬μ€νΈλ₯Ό μ¬μ©νμ¬ νΌλ³΄λμ° μλ₯Ό μ
λ°μ΄νΈ νλ©΄μ κ³μ°νμλ€.
λμΌν μμ΄λμ΄λ₯Ό μ¬μ μ μ΄μ©νμ¬ κ΅¬νν μ μλ€.
μ€ν μκ°κ³Ό λ₯λ ₯μ κΈ°λ³Έμ μΌλ‘ fibList
μ λμΌνλ€.
def fibDict(n):
known_nums = {0:1, 1:1}
for k in range(2, n+1):
res = known_nums[1] + known_nums[0]
known_nums[0] = known_nums[1]
known_nums[1] = res
return known_nums[1]
start_time = time.time()
fibNum100000 = fibDict(100000)
end_time = time.time()
elapsed_time = end_time - start_time
print(f'μ½ {elapsed_time}μ΄ κ±Έλ Έμ΅λλ€.')
start_time = time.time()
fibNum1M = fibDict(1000000)
end_time = time.time()
elapsed_time = end_time - start_time
print(f'μ½ {elapsed_time}μ΄ κ±Έλ Έμ΅λλ€.')
in
연산자¶λ¦¬μ€νΈμμ μ¬μ©λλ in
μ°μ°μμ μ¬μ μμ μ¬μ©λλ in
μ°μ°μλ λ΄λΆμ μΌλ‘ μλ‘ λ€λ₯΄κ² μλνλ€.
μ¬κΈ°μλ μ²λ¦¬μλ κ΄λ ¨ν΄μλ§ μ€λͺ
νλ€.
in
μ°μ°μ κ²μ μλ: νκ· μ μΌλ‘ μ¬μ©λλ 리μ€νΈμ κΈΈμ΄μ λΉλ‘in
μ°μ°μ κ²μ μλ: νκ· μ μΌλ‘ μ¬μ μ κΈΈμ΄μ μκ΄μμ. λ€λ§ μ΅μ
μ κ²½μ° κΈΈμ΄μ λΉλ‘.μμΈν λ΄μ©μ μκ° λ³΅μ‘λλ₯Ό μ°Έμ‘°ν μ μλ€.
μλ κΈ°μ€μ λ§μ‘±νλ has_duplicates
ν¨μλ₯Ό ꡬννλΌ.
True
λ₯Ό
κ·Έλ μ§ μμΌλ©΄ False
λ₯Ό 리ν΄νλ€.μΈμλ‘ μ¬μ©λ 리μ€νΈλ μμ νμ§ μλλ€.
μμ :
>>> has_duplicates([1, 2, 1, 3])
True
>>> has_duplicates(['hello', 'hi', 'hey'])
False
ννΈ: μ§ν©(set
) μλ£ν νμ©
for
λ°λ³΅λ¬Έ νμ©. 리μ€νΈμ λ¨μ΄λ₯Ό μΆκ°ν λ append
μ strip
λ©μλ νμ©.
μ λ΅μ wordlist.py μ°Έκ³ .
in
μ°μ°μ νμ©νμ¬ κ΅¬ννλΌ.
in
μ°μ°μ νμ©νμ¬ κ΅¬ννλΌ.
words.txt
νμΌμμ λ¨μ΄λ₯Ό μ½μ΄ λ€μΈ ν κ°κ°μ λ¨μ΄λ₯Ό ν€λ‘ μ¬μ©νλ€.
λͺ¨λ ν€μ κ°μ True
λ‘ μ νλ€.
in
μ°μ°μμ μ€νμλκ°
μΌλ§λ λΉ λ₯Έμ§ νμΈνλΌ.
μμ μ μ nμ ν©ν λ¦¬μΌ κ°μ 1λΆν° nκΉμ§μ κ³±μ μ΄λ€.
n! = n*(n-1)*(n-2)*...*2*1
n!
μ κ³μ°νλ ν¨μ factorial
μ μλμ κ°μ΄ μ¬κ·λ‘ ꡬνν μ μλ€.
def factorial(n):
if n == 1:
return 1
else:
res = n * factorial(n-1)
return res
κ³μ°κ°λ₯ν ν©ν 리μΌμ νκ³λ₯Ό νμΈνλΌ.
factorialDynamic
λ₯Ό λμ κ³νμ μ΄μ©νμ¬ κ΅¬νν νμ,
κ³μ°κ°λ₯ν ν©ν 리μΌμ νκ³κ° λ¬λΌμ§λμ§ νμΈνλΌ.