中文版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)

posted on 2010-09-04 21:45  菜刀大侠  阅读(394)  评论(0编辑  收藏  举报