我试图通过这个配对字母
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 ....
我试图通过这个配对字母
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 ....
您可以利用该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 之间传递数据——实际上我即将这样做——而且从不需要这个函数。但是,如果您有关于交换数据的最佳方式的具体问题,最好单独提出一个问题,而不是编辑这个问题,因为当前问题有多个答案。]
我想你想要的是这样的
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
我认为您正在寻找的是嵌套的 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
) 的索引,以便其代码不会重复。