2013-01-17 65 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