2

これでアルファベットをペアリングしてみました

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

しかし、AZを出力した後に範囲が定義されるまで、この文字列を次のように配置する必要がありますAA AB AC AD AE。その場合、結果はAZを出力してからAA ABAC...のようになります。

4

3 に答える 3

6

モジュールを利用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']

必要に応じて、オブジェクトを作成して1つずつ取得できます。

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

[更新:PythonとExcelの間で常にデータを渡すことに注意する必要があります。実際には、これからそうしますが、この関数は必要ありません。しかし、データを交換するための最良の方法について特定の質問がある場合は、現在の質問に対するいくつかの回答があるので、これを編集するよりも別の質問をする方がおそらく良いでしょう。]

于 2013-01-17T15:57:08.473 に答える
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

于 2013-01-17T15:11:07.540 に答える
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列で文字が印刷され、その後に2番目の文字が印刷されます。

ideone.comで利用可能な実例-> http://ideone.com/M862Ra

于 2013-01-17T15:43:10.723 に答える