在Python中制作字符串系列

f2l*_*pll 1 python python-3.x

我在Python中有一个问题我无法绕过头脑,即使它很简单(我认为).

我正在尝试制作"弦乐系列".我真的不知道它叫什么,但它是这样的:

我想要一个能够使串联运行的字符串的函数,这样每次调用函数时它都会"计数"一次.

我有一个列表"a-z0-9 ._-"(a到z,0到9,点,下划线,短划线).我应该从我的方法收到的第一个字符串是aaaa,下次我打电话给它,它应该返回aaab,下次aaac等,直到我到达----

字符串的长度也是固定的,但应该很容易更改.

(在你查看我的代码之前,如果我的代码不符合约定,我想道歉;我几天前开始编写Python代码,所以我还是一个菜鸟).

我得到了什么:

生成可用字符列表

chars = []
for i in range(26):
    chars.append(str(chr(i + 97)))

for i in range(10):
    chars.append(str(i))

chars.append('.')
chars.append('_')
chars.append('-')
Run Code Online (Sandbox Code Playgroud)

获取序列中的下一个字符串

iterationCount = 0
nameLen = 3
charCounter = 1
def getString():
    global charCounter, iterationCount
    name = ''
    for i in range(nameLen):
        name += chars[((charCounter + (iterationCount % (nameLen - i) )) % len(chars))]
    charCounter += 1
    iterationCount += 1
    return name
Run Code Online (Sandbox Code Playgroud)

getString()是需要修复的功能,特别是名称的构建方式.

我有这种感觉,通过在索引中使用正确的"modulu hack"是可能的,但我不能让它按预期工作!

mat*_*ata 8

您尝试做的事情可以使用生成器非常轻松地完成itertools.product:

import itertools

def getString(length=4, characters='abcdefghijklmnopqrstuvwxyz0123456789._-'):
    for s in itertools.product(characters, repeat=length):
        yield ''.join(s)

for s in getString():
    print(s)


aaaa
aaab
aaac
aaad
aaae
aaaf
...    
Run Code Online (Sandbox Code Playgroud)

  • 最好调用`len` - `length`以便不影响内置函数,而`itertools.product(*([characters]*len))`似乎有点复杂 - 我建议`itertools.product(字符) ,repeat = length)` (2认同)