①排列和组合
对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))