理解并简化此lin

2024-04-27 00:02:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现这个例子可以找到给定长度的字母表的所有字符串。你知道吗

for i in range(length):
    result = [str(x)+str(y) for x in alphabet for y in result or ['']]

我试图理解它是如何工作的,如果这是用for循环实现的,它会是什么样子-我所有简化它的尝试都变得非常混乱,并且会在无限循环中崩溃。。。而这个每次都有效。你知道吗


示例:

def allstrings(alphabet, length):
    """Find the list of all strings of 'alphabet' of length 'length'"""

    alphabet = list(alphabet)

    result = []

    for i in range(length):
        result = [str(x)+str(y) for x in alphabet for y in result or ['']]

    return result

# will return ['aa', 'ab', 'ba', 'bb']
print(allstrings({'a', 'b'}, 2)))

# will return ['000', '001', '010', '011', '100', '101', '110', '111']
print(allstrings({'0', '1'}, 4)))

代码修改自:http://code.activestate.com/recipes/425303-generating-all-strings-of-some-length-of-a-given-a/


Tags: orofinforreturnrangeresultall
3条回答

基本上,您使用的是所谓的列表理解,它本质上是一个返回列表的向后for循环。使用这种技术,可以将字符串连接在一起,以给定的长度迭代给定的字母。你知道吗

>>> alphabet="abcd"
>>> list(itertools.permutations(alphabet,3))

应注意查找字母表的所有排列(字长3)

简而言之,这相当于您的代码,因为我还没有看到其他人提供给您。我确实建议使用Joran Beasley写的itertools,因为它们速度更快,而且语句更清晰、更简单。你知道吗

def permute(alphabet):
    result = []
    for x in alphabet:
        for y in alphabet:
            result.append(str(x)+str(y))
    return result

输出处于空闲状态时为:

>>> alphabet = ["a", "b", "c"]
>>> r = permute(alphabet)
>>> r
['aa', 'ab', 'ac', 'ba', 'bb', 'bc', 'ca', 'cb', 'cc']

但是,这种方法使定义所需长度变得更加困难。为了达到这个效果,你必须采取以下措施:

def permute(original, permutated):
    result = []
    for x in alphabet:
        for y in permutated or [""]:
            result.append(str(x)+str(y))
    return result

def helper(alphabet, length):
    res = []
    for i in range(length):
        res = permute(alphabet, res)
    return res

其输出现在如下所示:

>>> h = helper(alphabet, 2)
>>> h
['aa', 'ab', 'ac', 'ba', 'bb', 'bc', 'ca', 'cb', 'cc']
>>> h = helper(alphabet, 3)
>>> h
['aaa', 'aab', 'aac', 'aba', 'abb', 'abc', 'aca', 'acb', 'acc', 'baa', 'bab', 'bac', 'bba', 'bbb', 'bbc', 'bca', 'bcb', 'bcc', 'caa', 'cab', 'cac', 'cba', 'cbb', 'cbc', 'cca', 'ccb', 'ccc']

你知道发生了什么事吗?或者我应该写个解释。(但请先努力)。你知道吗

相关问题 更多 >