[英]Generate strings in lexicographical order in Python
这是我的解决方案:
import string
def lexstrings(max_length: int, alphabet=string.ascii_lowercase):
yield ""
if max_length == 0: return
for first in alphabet:
for suffix in lexstrings(max_length - 1, alphabet=alphabet):
yield first + suffix
例子:
>>> g = lexstrings(max_length=3, alphabet="ab")
>>> list(g)
['',
'a',
'aa',
'aaa',
'aab',
'ab',
'aba',
'abb',
'b',
'ba',
'baa',
'bab',
'bb',
'bba',
'bbb']
这可能不是最好的解决方案,因为它涉及递归并使用+
运算符m
次来生成长度为m
的字符串,这效率不高,因为 Python 生成中间结果的副本(因为字符串是不可变的)。
此实现还“支持”无限版本:
>>> g = lexstrings(-1)
>>> next(g)
''
>>> next(g)
'a'
>>> next(g)
'aa'
>>> next(g)
'aaa'
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.