求列表全排列python
lst = [1,2,3] l1 = [(x,y,z) for x in lst for y in lst for z in lst if x != y if y != z if x != z] print(l1)
給定一個非負整數num,重複的加每一位,直到最後只剩下一位app
例如: num = 38,計算過程以下:ide
3 + 8 =11函數
1 + 1 = 2優化
最後輸出結果爲2orm
#遞歸 def add(num): if len(str(num)) == 1: return num ret = 0 for i in str(num): ret += int(i) return ret return(add(ret)) print(add(8))
#累加器 def add(num): ret = 0 for i in str(num): ret += int(i) return ret def cacl(num): ret = num while ret >= 10: ret = add(ret) return ret print(cacl(38)) #使用列表解析優化版 def add(num): return sum([int(x) for x in str(num)]) def cacl(num): ret = num while ret >= 10: ret = add(ret) return ret print(cacl(38))
尋找happy number遞歸
happy number值,對一個數字的每一位取平方後相加,對獲得的結果反覆執行上一步,直到最後只有一位,若是最後結果爲1,這個數就爲happy number.it
例如 19 就是happy number.由於form
1^2 + 9^2 = 82class
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
def add(num): ret = 0 for i in str(num): ret += (int(i) ** 2) return ret def happy_number(num): results = {num} ret = num while ret >= 10: ret = add(ret) if ret in results: return False results.add(ret) return ret == 1 for i in range(1,10000): if happy_number(i): print('{0} is happy number'.format(i)) #使用列表解析優化上版 def add(num): return sum([int(x) ** 2 for i in str(num)]) def happy_number(num): results = {num} ret = num while ret >= 10: ret = add(ret) if ret in results: return False results.add(ret) return ret == 1 for i in range(1,10000): if happy_number(i): print('{0} is happy number'.format(i))
裝飾器
寫一個帶一個default_user 參數的裝飾器,此裝飾器檢查傳入函數的關鍵字參數,若是沒有名爲user的參數,使用default_user 做爲user 參數傳遞給函數.
例如:
@inject_user(default_user=comyn)
def do_something(*args,**kwargs):
print(kwargs['user'])
調用do_something() 時能輸入comyn
from functools import wraps def inject_user(default_user): def func(fn): @wraps(fn) def deco(*args, **kwargs): if 'user' not in kwargs.keys(): kwargs['user'] = default_user return fn(*args, **kwargs) return deco return func @inject_user(default_user='comyn') def do_somethings(*args, **kwargs): print(kwargs['user']) do_somethings()
列表匹配
寫一個find函數,傳入兩個列表,其中origin和iterms, items具備默認值[3, 4].查找iterms中每一個元素在origin中的全部位置.返回值爲字典,key是iterms中的元素,value是位置的元組.
例如:
find([2, 3, 5, 3, 4, 2, 7, 4]) 返回{3:(1, 3), 4:(4, 7)}
def find(origin,items=[3, 4]): fin = dict() for x in iter(items): lst = list() for k, v in enumerate(origin): if x == v: lst.append(k) fin[x] = tuple(lst) return fin find([2, 3, 5, 3, 4, 2, 7, 4]) #使用列表解析優化 def find(origin,items=[3, 4]): fin = dict() for x in items: lst = list() [lst.append(k) for k, v in enumerate(origin) if x == v] fin[x] = tuple(lst) return fin find([2, 3, 5, 3, 4, 2, 7, 4])