python小工具

Redhur-發表於2020-10-23

①排列和組合
對123進行排列,有以下結果:
123 132 213 231 312 321

隨機從1234中抽出 3個數,這是一個組合問題,有以下的結果:
123 234 134 124 (123和321和132等等都是同一個結果)

四位由1234組成的密碼,_ _ _ _
一共有444*4種可能

import itertools
mylist1=list(itertools.permutations([1,2,3],2)) #排列
print(mylist1)
#[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

mylist2=list(itertools.combinations([1,2,3,4],3))#組合
print(mylist2)
#[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]

mylist3=list(itertools.product("0123456789",repeat=6))
print(mylist3)  #由0123456789組成的6位密碼
import itertools
mylist=list(itertools.product("1234",repeat=2))
print(mylist) 
#[('1', '1'), ('1', '2'), ('1', '3'),,,,]
mylist1=["".join(x) for x   in itertools.product("1234",repeat=2)]
print(mylist1)
#['11', '12', '13',,,]

②join()方法語法:

str.join(sequence)
str = "-";
seq = ("a", "b", "c"); # 字串序列
print(str.join( seq ));
#a-b-c

③yield生成器
窮舉的方法不一定是print,也可以是yield

#從那麼多數字字母中生成一個16位可以重複的密碼,如果你用print那會相當的佔記憶體,所以你可以用yield來不佔記憶體的輸出
import  itertools
for x   in itertools.product("0123456789abcdefghijklmnopqrstuvwxyz",repeat=16):
        print("".join(x))
   
import  itertools
def getpassword():
    for x   in itertools.product("0123456789abcdefghijklmnopqrstuvwxyz",repeat=16):
        yield  "".join(x)

T=getpassword()
for i  in range(1000):
    print(next(T))

相關文章