简体   繁体   English

Python:打印可能的字母组合键大小

[英]Python: print possible letter combination of key size

I am pretty new to python. 我对python很陌生。 I need your help for this: 为此,我需要您的帮助:

If key size is 2. I should print all possible combination of letters of size 2. 如果密钥大小为2,则应打印大小为2的字母的所有可能组合。

     key = 2 => aa ab ac ad..az....ba bb bc bd..bz..... so on.....za zb zc..zz
     key = 3 => aaa aab aac...bbb bba..... so on

How to code for this in python for any given key size? 对于任何给定的密钥大小,如何在python中对此进行编码?

Note: it should work for any given key size. 注意:它适用于任何给定的密钥大小。

itertools is the library you need for most combinatorics; itertools是大多数组合工具所需的库; in this case, product : 在这种情况下, product

import itertools

def permutation_with_repeats(seq, key):
    """ 
    generator that produces all permutations of length key 
    of the elements in  seq.
    seq = list('abc'); key = 4
    >>> aaaa aaab aaac aaba aabb aabc aaca aacb...
    seq = list('abcdefghijklmnopqrstuvwzyz'); key = 2
    >>> aa ab ac ad ae af ag ah ai aj ak al...
    """
    for _ in  itertools.product(seq, repeat=key):
        yield ''.join(_)

seq = list('abcdefghijklmnopqrstuvwzyz')
key = 2
a = permutation_with_repeats(seq, key)  # seq and key of arbitrary size > 0

while True:
    try:
        print(next(a), end=' ')
    except StopIteration:
        break

output: 输出:

aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw az ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bz by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cz cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dz dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ez ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fz fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gz gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hz hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw iz iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jz jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kz ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lz ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mz my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nz ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow oz oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw pz py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qz qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rz ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sz sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tz ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw uz uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vz vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wz wy wz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zz zy zz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yz yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zz zy zz aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw az ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bz by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cz cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dz dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ez ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fz fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gz gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hz hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw iz iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jz jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kz ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lz ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mz my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nz ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow oz oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw pz py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qz qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rz ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sz sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tz ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw uz uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vz vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wz wy wz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zz zy zz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yz yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zz zy zz

itertools lets you create a generator expression that will yield each next item in lexicographic order without maintaining a large collection in memory. itertools允许您创建一个生成器表达式,该表达式将按字典顺序产生每个下一个项目,而无需在内存中保留大量集合。

You need to use itertools . 您需要使用itertools

import itertools

a=(''.join(x) for x in  itertools.product('abcd', repeat=3))

for t in a:
    print t

Here a is a generator. 这里a是发电机。 It doesn't eat up memory as it generates the values on demand. 它不会消耗内存,因为它会按需生成值。 repeat argument indicates how long you want the generated string to be (1 - one letter [ad], 2 - two letters [aa-dd], etc). repeat参数指示您希望生成的字符串多长时间(1-1个字母[ad],2-2个字母[aa-dd]等)。

import itertools
print(*map(''.join, itertools.product('abcd', repeat=3)))

looks like you want permutations with repetition. 看起来您想要重复排列。

You can use product for that from intertools 您可以通过intertools使用该产品

def perm_Rep(n, r):

    import string

    from itertools import product

    elements = string.ascii_letters.upper()[:n]

    assert(r <= n), "r can't be greater than n !!!"

    for x in  product(elements, repeat=r):
        yield ''.join(x)

from 5 letters: ABCDE choose 3 从5个字母中选择:ABCDE选择3个

for el in (perm_Rep(5, 3)): 对于el in(perm_Rep(5,3)):

print(el)

AAA AAB AAC AAD AAE ABA ABB ABC ABD ABE ACA ACB ACC ACD ACE ADA ADB ADC ADD ADE AEA AEB AEC AED AEE BAA BAB BAC BAD BAE BBA BBB BBC BBD BBE BCA BCB BCC BCD BCE BDA BDB BDC BDD BDE BEA BEB BEC BED BEE CAA CAB CAC CAD CAE CBA CBB CBC CBD CBE CCA CCB CCC CCD CCE CDA CDB CDC CDD CDE CEA CEB CEC CED CEE DAA DAB DAC DAD DAE DBA DBB DBC DBD DBE DCA DCB DCC DCD DCE DDA DDB DDC DDD DDE DEA DEB DEC DED DEE EAA EAB EAC EAD EAE EBA EBB EBC EBD EBE ECA ECB ECC ECD ECE EDA EDB EDC EDD EDE EEA EEB EEC EED EEE AAA AAB AAC AAD AAE AAE ABA ABB ABC ABD ABE ACA ACA ACB ACC ACD ACE ADA ADB ADC添加ADE AEA AEB AEC AED AEE BAA BAB BAC BAD BAE BBA BBB BBC BBD BBE BCA BCB BCC BCD BCE BDA BDB BDC BDE BBE BB BED CAA CAB CAC CAD CAE CBA CBB CBC CBD CBE CCA CCB CCC CCD CCE CDA CDB CDC CDD CDE CEA CEB CEC CED CEE CEE DAA DA​​B DAC DAD DAE DBA DBB DBC DBD DBE DCA DCB DCC DCD DCD DCE DDA DDB DDC DDE DED DED DED DEC DE EAA EAB EAC EAD EAE EBA EBB EBC EBD EBE ECA ECB ECB ECC ECD ECE EDA EDB EDC EDC EDD EDE EEA EEB EEC EED EEE

What you have here is a classic permutation problem. 您这里拥有的是一个经典的排列问题。

Check this previous Stack Overflow answer for some ideas -- the only difference is for you, you'll feed it the alphabet, instead of his list of numbers. 请查看前面的Stack Overflow答案以获取一些想法 -唯一的不同是,您将用字母代替它的数字列表。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM