目标:创建一个单词生成器,用字母表中的52个字母创建每个单词,直到8个字符。
我知道基本的是,生成器必须能够将x(在这种情况下基线的数量为字母表)设为8的幂,但我无法将其放入适当数量的代码中,样本:
alphabet = "abcdefghijklmnopqrstuvwxyz"
or
alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n",...] # u get the point
并且对于数组变量中的每个元素:
for i in alphabet:
wordlist.append(something)
将创建类似于:
的内容一 AB AC 广告 ... ABA ABC ABD ... A B C D ... zzzzzzzz
答案 0 :(得分:1)
你可以使用递归来做到这一点,除了说我建议你的字母表存储为一个字符数组或一个长度为1的字符串数组之外,我会将基数和递归情况留给你。为了让你更容易循环它
const int MAX_LENGTH = 8
void myFunction(String currentString) {
if(currentString.length == MAX_LENGTH) {
// base case
} else {
// recursive case
}
}
答案 1 :(得分:0)
你可以使用itertools包来做到这一点。
import itertools
alphabet = "abcdefghijklmnopqrstuvwxyz"
l=list(alphabet)
# as a list
genList= ["".join(i) for j in xrange(8) for i in itertools.combinations(l, j+1)]
print genList # to test
# as generator
("".join(i) for j in xrange(8) for i in itertools.combinations(l, j+1))
如果你想打印r的长度
for item in itertools.combinations(input_list, r = 8):
yield "".join(list(item))
输出:所有组合
[...'' ac',' ad',' ae',' af&#39 ,' ag'啊',' ai',' aj',' ak',&#39 ; al',' am',' an',' ao',' ap',' aq' ,''',' at',' au',' av',' aw',' ax',' ay',' az',' bc',...]
答案 2 :(得分:0)
您可以使用itertools
轻松解决这些问题,但这是一个简单的递归示例:
from string import ascii_lowercase,ascii_uppercase
letters = " "+ascii_lowercase+ascii_uppercase # 52 letters + blank space
wordlist = []
def GetCombinations(str):
for i in xrange(0,53):
word = str+letters[i]
wordlist.append(word)
if (len(word)<8):
GetCombinations(word)
GetCombinations("")
这简单地以递归方式确定您传入的字符串的所有组合(字母+空格)。如果您愿意,可以轻松处理空白区域。