python独特的字符串创建

pow*_*118 5 python algorithm python-2.7

我已经看过其他几个与此类似的"问题"(和google'd吨),但它们似乎都不符合我的问题.

我试图制作一个非固定长度,唯一的文本字符串,只包含我指定的字符串中的字符.例如,由大写和小写的a-zA-Z字符组成.(对于这个例子,我只使用a,b和c小写)

像这样的东西(下面的代码破碎)

def next(index, validCharacters = 'abc'):
    return uniqueShortAsPossibleString
Run Code Online (Sandbox Code Playgroud)

index参数将是与文本字符串相关的索引(整数),例如:

next(1)  == 'a'
next(2)  == 'b'
next(3)  == 'c'

next(4)  == 'aa'
next(5)  == 'ab'
next(6)  == 'ac'

next(7)  == 'ba'
next(8)  == 'bb'
next(9)  == 'bc'

next(10) == 'ca'
next(11) == 'cb'
next(12) == 'cc'
Run Code Online (Sandbox Code Playgroud)

等等.字符串:

  1. 必须是唯一的,我将它用作标识符,它只能是a-zA-Z字符
  2. 索引编号越短越短(见上例)
  3. 仅包含给定参数字符串validCharacters中指定的字符

总之,如何编写next()函数将整数索引值与指定字符的唯一短字符串相关联?

PS我是SO的新手,这个网站多年来一直帮助我,虽然我从来没有做过帐户或问过问题(到现在为止),但我真的希望我做了一个好的工作来解释我的问题.我试图用这个完成.

agf*_*agf 1

您试图将一个数字转换为另一个基数的数字,但对该基数的数字使用任意字符。

import string
chars = string.lowercase + string.uppercase

def identifier(x, chars):
    output = []
    base = len(chars)
    while x:
        output.append(chars[x % base])
        x /= base
    return ''.join(reversed(output))

print identifier(1, chars)
Run Code Online (Sandbox Code Playgroud)

这可以让您跳转到任何位置,您可以进行计数,因此标识符是完全唯一的,并且可以轻松使用任何长度(两个或更多)的任何字符集,并且数字越小,标识符越短。