2013-01-17 35 views
1

我试图通过这个的Python:循环结束后对字母完成

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直到范围是印刷AZ之后定义,那么结果会是怎样 打印AZ然后AA AB AC ....

+0

因此,您要求的是是与Excel用于列命名的列表相同吗?在AZ之后,BA应该打印,还是应该停在52个字? – tonycoupland

+0

你是正确的我正在写这个函数把数据放在excel中 –

回答

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之间传递数据 - 我正准备这样做 - 实际上 - 并且从不需要此函数。但是,如果您有关于交换数据的最佳方式的具体问题,最好提出一个单独的问题,而不是编辑此问题,因为现在的问题有几个答案。]

+0

谢谢pythonic和awsm回答 –

+0

我可以问,你如何从Python传递数据到Excel,我很感兴趣 –

0

我想你正在寻找的是一个嵌套循环,像这样的:我定义

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),以便其代码不会重复。

+0

我已经编辑了我的问题。事实上Az需要先打印,然后其余的范围打印为AA AB AC –

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