中文版p83页:
girls = ['alice', 'bernice', 'clarice']
boys = ['chris', 'arnold', 'bob']
letterGirls = {}
for girl in girls:
letterGirls.setdefault(girl[0], []).append(girl)
print ([b+'+'+g for b in boys for g in letterGirls[b[0]]])
输出结果:
>>>
['chris+clarice', 'arnold+alice', 'bob+bernice']
原理:
>>> girls = ['alice', 'bernice', 'clarice']
>>> letterGirls = {}
>>> for girl in girls:
letterGirls.setdefault(girl[0], []).append(girl)
>>> print letterGirls
{'a': ['alice'], 'c': ['clarice'], 'b': ['bernice']}
letterGirls.setdefault(girl[0], [])
'a':[]
letterGirls.setdefault(girl[0], []).append(girl)
'a':['alice']
如此便是个很好的方法。
p91:
斐波那契数列:
def fibs(num):
result = [0, 1]
for i in range(num-2):
result.append(result[-2] + result[-1])
return result
num = input('How many Fibonacci numbers do you want? ')
print fibs(num)
阶乘:
递归版本
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
非递归:
def factorial(n):
result = n
for i in range(1,n):
result *= i
return result
power函数:
递归
def power(x, n):
if n == 0:
return 1
else:
return x * power(x, n-1)
非递归
def pow(x,n):
result = 1
for i in range(n):
result *= x
resturn result
二分查找:
def search(sequence, number, lower=0, upper=None):
if upper is None: upper = len(sequence)-1
if lower == upper:
assert number == sequence[upper]
return upper
else:
middle = (lower + upper) // 2
if number > sequence[middle]:
return search(sequence, number, middle+1, upper)
else:
return search(sequence, number, lower, middle)