将计数更改为字母数组python

时间:2012-03-20 20:08:44

标签: python

我正在努力解决一个想要放入python脚本的想法。我甚至不确定如何提出最合适的问题,因为我一直在网上冲浪试图找到我想要的东西而没有运气。

基本上,我有一个简单计算的脚本:

divider = int(math.ceil(df.scale / 3000))

这是因为我想要'分频器'返回值除以3000并始终向上舍入。我想用这个值帮我回信。

所以,它是这样的:

如果1返回,那么我想要返回' A' 如果2返回,那么我想创建' A' B' B' 如果3返回,那么我想创建' A',' B'' C' 等等....

我的最终结果是,我想保存一些文件。 '分频器'将确定我想保存多少文件,然后每个文件将以递归方式用其中的字母命名(即FileA,FileB,FileC ......)

好的,我知道我的问题并不完全合适,但是我对这个逻辑感到挣扎,所以如果你需要一些清晰度,请告诉我。

2 个答案:

答案 0 :(得分:6)

你的意思是:

for i in range(int(math.ceil(df.scale / 3000))):
  # i will contain 0, 1, 2, ...
  # letter will contain 'A', 'B', 'C', ...
  letter = chr(ord('A') + i)

或者,如果您需要实际清单:

[chr(ord('A') + i) for i in range(int(math.ceil(df.scale / 3000)))]

您还可以使用string.ascii_uppercase获取大写字母列表并根据需要对其进行切片:

from string import ascii_uppercase

print list(ascii_uppercase)[:int(math.ceil(df.scale / 3000))]

答案 1 :(得分:3)

因为对我来说这是最后一天,这是另一种方法,它推广到超过26个文件,电子表格 - 列名称样式:

import string, itertools

def name_generator(min_length=1, alphabet=string.ascii_uppercase):
    for length in itertools.count(min_length):
        for chars in itertools.product(alphabet, repeat=length):
            yield ''.join(chars)

def get_names(n):
    return list(itertools.islice(name_generator(), 0, n))

给出了

>>> get_names(1)
['A']
>>> get_names(3)
['A', 'B', 'C']
>>> get_names(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']