求列表全排列
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,重復的加每一位,直到最后只剩下一位
例如: num = 38,計算過程如下:
3 + 8 =11
1 + 1 = 2
最后輸出結果為2
#遞歸
def?add(num):if?len(str(num))?==?1:return?numret?=?0for?i?in?str(num):ret?+=?int(i)return?retreturn(add(ret))
print(add(8))
#累加器
def?add(num):ret?=?0for?i?in?str(num):ret?+=?int(i)return?retdef?cacl(num):ret?=?numwhile?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?=?numwhile?ret?>=?10:ret?=?add(ret)return?ret
print(cacl(38))
尋找happy number
happy number值,對一個數字的每一位取平方后相加,對得到的結果反復執行上一步,直到最后只有一位,如果最后結果為1,這個數就為happy number.
例如 19 就是happy number.因為
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
def?add(num):ret?=?0for?i?in?str(num):ret?+=?(int(i)?**?2)return?retdef?happy_number(num):results?=?{num}ret?=?numwhile?ret?>=?10:ret?=?add(ret)if?ret?in?results:return?Falseresults.add(ret)return?ret?==?1for?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?=?numwhile?ret?>=?10:ret?=?add(ret)if?ret?in?results:return?Falseresults.add(ret)return?ret?==?1for?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_userreturn?fn(*args,?**kwargs)return?decoreturn?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?finfind([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?finfind([2,?3,?5,?3,?4,?2,?7,?4])
轉載于:https://blog.51cto.com/390892467/1749770