Python:循环完成后对字母表

时间:2013-01-17 15:04:18

标签: python python-2.7

我试图用这个

配对字母表
import string
a=string.uppercase
for i in range(0,30):
    print a[i%26]*(i / 26+1)

This will print A-Z and then after Z it will print AA BB like string

但是我需要把这个字符串像AA AB AC AD AE一样,直到在打印A-Z后定义范围然后结果会像 打印A-Z然后AA AB AC ....

3 个答案:

答案 0 :(得分:4)

您可以利用itertools模块并使用生成器来处理这个问题:

from itertools import count, product, islice
from string import ascii_uppercase

def multiletters(seq):
    for n in count(1):
        for s in product(seq, repeat=n):
            yield ''.join(s)

给出

>>> list(islice(multiletters('ABC'), 20))
['A', 'B', 'C', 'AA', 'AB', 'AC', 'BA', 'BB', 'BC', 'CA', 'CB', 'CC', 'AAA', 'AAB', 'AAC', 'ABA', 'ABB', 'ABC', 'ACA', 'ACB']
>>> list(islice(multiletters(ascii_uppercase), 30))
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD']

如果您愿意,可以制作一个对象并逐个获取:

>>> m = multiletters(ascii_uppercase)
>>> next(m)
'A'
>>> next(m)
'B'
>>> next(m)
'C'

[更新:我应该注意,虽然我一直在Python和Excel之间传递数据 - 实际上即将这样做 - 并且永远不需要这个功能。但是,如果你有一个关于交换数据的最佳方式的具体问题,那么现在提出一个单独的问题比编辑这个问题更好,因为当前问题有几个答案。]

答案 1 :(得分:0)

我认为您正在寻找的是嵌套for循环,如下所示:

import string

def get_string(val):
    return string.uppercase[val%26]*(val / 26+1)


for i in range(0,26):
    for j in range(0, 26):
        print get_string(i) + get_string(j)

请注意,我已将string.uppercase的索引定义为函数(get_string),以便不会重复其代码。

答案 2 :(得分:0)

我认为你想要的是这样的

import string

def get_string(val):
    return string.uppercase[val%26]*(val / 26+1)


for i in range(-1,26):
    for j in range(0, 26):
        if i==-1:
            print get_string(j)
        else:
            print get_string(i) + get_string(j)

第一次通过外循环时,不要打印前导字符(前26个Excel列),然后接下来的26列打印一个字母后跟第二个字母。

ideone.com上提供的工作示例 - > http://ideone.com/M862Ra